2
我在Underscore.js的_.each实现中遇到了这行代码,我很好奇这里正在发生什么。 obj前面的'+'是做什么的?用'+'操作符为对象添加前缀是做什么的?
if (obj.length === +obj.length) { ... }
我在Underscore.js的_.each实现中遇到了这行代码,我很好奇这里正在发生什么。 obj前面的'+'是做什么的?用'+'操作符为对象添加前缀是做什么的?
if (obj.length === +obj.length) { ... }
的if
测试,obj.length
是数字,而不是NaN
。右侧始终是一个数字(或NaN
,如果obj.length
不能被解释为数字)。如果obj.length
也是一个数字,它只会在左边===
。
请注意,如果obj.length
是一个数字外观字符串,则使用isNaN
将不起作用;即isNan("3")
返回false
。还请注意,NaN === NaN
是false
— NaN
从来没有===
任何东西。
那么比较同一个对象的.length属性有什么意义呢?一次是'强制编号',一次不是?这完成了什么? – alnafie 2013-02-19 06:36:27
@alnafie - 我必须查看代码才能知道,但是我最初的猜测是它会绕过代码,要么需要'obj.length'是一个数字,要么是一些昂贵的代码来计算'obj.length如果它已经正确设置,应该跳过。 – 2013-02-19 06:42:03