阅读underscore.js
的源代码我偶然发现了following line:
... if (obj.length === +obj.length) { ...
这对我来说有点混乱。这里的实际比较是什么?我相信它有关于检测本机数组的一些事情,但无法弄清楚实际发生了什么。 +
做了什么?为什么要使用===
代替==
?这种风格有哪些性能优势?
答案 0 :(得分:6)
+
将值强制转换为数字(很像!!
将其强制转换为布尔值)。
if (x === +x)
...可用于确认x
本身包含整数值。在这种情况下,可能是确保obj
的length属性是一个整数并且没有被字符串值覆盖,因为如果将obj
视为数组,则可能会导致迭代失败。
答案 1 :(得分:1)
检查obj.length
是Number是一种愚蠢的(IMO)方式。这样更好:
typeof obj.length == "number"
答案 2 :(得分:1)
+将右侧的内容统一为数字。
在这种情况下,如果length不是对象的属性,则返回undefined。 + undefined
将产生Nan
并且此评估为假。
如果字符串可以被整合到一个数字中,那么它将是..例如+ '1'
会产生1
作为Number
这在处理十六进制值时尤其重要字符串形式例如+'0x7070'
会产生28784