发表于: 2019-12-15 23:45:25
1 1178
今日完成的事
调试接口
明日计划的事
调试接口
收获
JS 不良编码习惯
不要使用隐式类型转换
JavaScript是一种松散类型的语言。 如果使用得当,这是一个好处,因为它给你带来了灵活性。
大多数运算符+ - * / ==(不包括 ===)在处理不同类型的操作数时会进行隐式转换。
语句if(condition){...},while(condition){...}隐式地将条件转换为布尔值。
下面的示例依赖于类型的隐式转换,这种有时候会让人感到很困惑:
过度依赖隐式类型转换是一个坏习惯。 首先,它使你的代码在边缘情况下不太稳定。 其次,增加了引入难以重现和修复的bug的机会。
现在咱们实现一个获取对象属性的函数。如果属性不存在,函数返回一个默认值
getProp() 读取name属性的值,即'Batman'。
那么试图访问isVillian属性:
这是一个错误。即使 hero 的属性isVillian为false,函数getProp()也会返回错误的true。
这是因为属性存在的验证依赖于if(!object [propertyName]){...}隐式转换的布尔值。
这些错误很难发现,要修复该函数,就要明确验证值的类型:
object[propertyName] === undefined确切地验证属性是否为undefined。
这里建议避免直接使用undefined。 因此,上述解决方案可以进一步改进:
尽可能不要使用隐式类型转换。相反,请确保变量和函数参数始终具有相同的类型,必要时使用显式类型转换。
最佳实践列表:
始终使用严格的相等运算符===进行比较
不要使用松散等式运算符==
加法运算符 operand1 + operand2:两个操作数应该是数字或字符串
算术运算符 - * /%**:两个操作数都应该是数字
if(condition){...},while(condition){...}等语句:condition 必须是一个布尔类型值
评论