t》高级程序设计——类型转换错误

王朝学院·作者佚名  2016-05-23
窄屏简体版  字體: 小  |  中  |  大  |  超大  

《javascript》高级程序设计——类型转换错误容易发生类型转换错误的另一个地方,就是流控制语句。像if之类的语句在确定下一步操作之前,会自动把任何值转换成布尔值。尤其是if语句,如果使用不当,最容易出错。来看下面的例子。

function concat(str1,str2,str3){ var result= str1 + str2; if (str3){ //绝对不要这样 result += str3; } return result;}

这个函数的用意是拼接两或三个字符串,然后返回结果。其中,第三个字符串是可选的,因此必须要检查。第3章曾经介绍过,未使用过的命名变量会自动被赋予undefined值。而undefined值可以被转化成布尔值false,因此这个函数中的if语句实际上只适用于提供了提三个参数的情况。问题在于,并不是只有undefined才会被转化成false,也不是只有字符串值才可以转换为true。例如,假设第三个参数是数值0,那么if语句的测试就会失败,而对数值1的测试则会通过。

在流控制语句中使用非布尔值,是极为常见的一个错误来源。为避免此类错误,就要做到在条件比较时切实传入布尔值。实际上,执行某种形式的比较就可以达到这个目的。例如,我们可以将前面的函数重写如下。

function concar(str1,str2,str3){ var result = str1 + str2; if(typeof str3 == "string"){ //恰当的比较 result += str3; } return result;}

在这个重写后的函数中,if语句的条件会基于比较返回一个布尔值。这个函数相对可靠得多,不容易受非正常值得影响。

————————————————————————————————————————————————————————————————————————————

这个让我来写,一上来肯定是写成错误的形式,平常对强制转换没怎么在意。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航