我遇到了一个我很难理解的条件语句。它看起来像(请注意右侧的 +
-sign):
obj.length === +obj.length
。
这个条件和它的目的/语法能解释一下吗?
查看该声明(在不知情的情况下)会让人觉得它是某种肮脏的 hack,但我几乎可以肯定 underscore.js 是一个设计良好的库,因此必须有一个更好的解释。
背景
- 我发现此语句用于 underscore.js 库 ( underscore.js annotated source ) 的某些函数中。
- 我的猜测是这个条件语句与测试变量
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
最佳答案
它同时进行两个测试:
- 确保 obj.length 是一个数字
- 确保 obj.length 不是 NaN(不是数字)
也可以写成:
(typeof obj.length === 'number') && !isNaN(obj.length)
更新的答案:我首先说它等同于 typeof obj.length === 'number') && isFinite(obj.length)
但它不是,因为它返回 true对于 +Infinity
和 -Infinity
。感谢 RobG 指出这一点
关于javascript - 如何理解 "if ( obj.length === +obj.length )"Javascript条件语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808408/