阅读underscore.js
我的源代码偶然发现了以下行:
... if (obj.length === +obj.length) { ...
这对我来说有点令人困惑。这里实际比较的是什么?我相信它与检测原生数组有关,但无法弄清楚实际发生了什么。做什么的+
?为什么使用===
而不是==
?这种风格的性能优势是什么?
阅读underscore.js
我的源代码偶然发现了以下行:
... if (obj.length === +obj.length) { ...
这对我来说有点令人困惑。这里实际比较的是什么?我相信它与检测原生数组有关,但无法弄清楚实际发生了什么。做什么的+
?为什么使用===
而不是==
?这种风格的性能优势是什么?
将+
值强制为数字(很像!!
将其强制为布尔值)。
if (x === +x)
...可用于确认其x
本身包含一个整数值。在这种情况下,可能要确保 的长度属性obj
是一个整数并且没有被字符串值覆盖,因为如果obj
将其视为数组,这可能会破坏迭代。
这是检查是否obj.length
是Number的愚蠢(IMO)方式。这个更好:
typeof obj.length == "number"
+ 将右侧的内容结合为数字。
在这种情况下,如果长度不是对象 undefined 的属性,则将返回。+ undefined
将产生Nan
,这个评估是错误的。
如果字符串可以结合成一个数字,那么它将是.. 例如 + '1'
将产生1
,Number
这在处理字符串形式的十六进制值时尤其重要,例如+'0x7070'
产生28784