我遇到了条件陈述,我有些难以理解。它看起来像(请注意右侧的+
- 签名):
obj.length === +obj.length
。
可以解释这种情况及其目的/语法吗? 查看声明(不知道它)会引起一种印象,即它是某种肮脏的黑客,但我几乎可以肯定 underscore.js 是一个设计良好的库,所以必须有一个更好的解释。
obj
是否为Array类型有关? (但我完全不确定)。我试图使用此代码测试它。 var myArray = [1,2,3]; testResult1 = myArray.length === +myArray.length; console.log( testResult1 ); //prints true var myObject = { foo : "somestring", bar : 123 }; testResult2 = myObject.length === +myObject.length; console.log( testResult2 ); //prints false
答案 0 :(得分:5)
unary plus operator(+
)将RHS转换为数字。
这是一个测试,看看该值是否为数字。
答案 1 :(得分:5)
它同时进行两项测试:
也可以写成:
(typeof obj.length === 'number') && !isNaN(obj.length)
更新的答案:我首先说它等同于typeof obj.length === 'number') && isFinite(obj.length)
,但它不是因为+Infinity
和-Infinity
返回true。感谢RobG指出