Javascript成语:if(x === + x)怎么办?

时间:2013-02-14 16:29:03

标签: javascript arrays idioms triple-equals

阅读underscore.js的源代码我偶然发现了following line

... if (obj.length === +obj.length) { ...

这对我来说有点混乱。这里的实际比较是什么?我相信它有关于检测本机数组的一些事情,但无法弄清楚实际发生了什么。 +做了什么?为什么要使用===代替==?这种风格有哪些性能优势?

3 个答案:

答案 0 :(得分:6)

+将值强制转换为数字(很像!!将其强制转换为布尔值)。

if (x === +x)

...可用于确认x本身包含整数值。在这种情况下,可能是确保obj的length属性是一个整数并且没有被字符串值覆盖,因为如果将obj视为数组,则可能会导致迭代失败。

答案 1 :(得分:1)

检查obj.lengthNumber是一种愚蠢的(IMO)方式。这样更好:

typeof obj.length == "number"

答案 2 :(得分:1)

+将右侧的内容统一为数字。

在这种情况下,如果length不是对象的属性,则返回undefined。 + undefined将产生Nan并且此评估为假。

如果字符串可以被整合到一个数字中,那么它将是..例如+ '1'会产生1作为Number这在处理十六进制值时尤其重要字符串形式例如+'0x7070'会产生28784