4

阅读underscore.js我的源代码偶然发现了以下行

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

这对我来说有点令人困惑。这里实际比较的是什么?我相信它与检测原生数组有关,但无法弄清楚实际发生了什么。做什么的+?为什么使用===而不是==?这种风格的性能优势是什么?

4

3 回答 3

6

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

if (x === +x)

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

于 2013-02-14T16:31:21.163 回答
1

这是检查是否obj.lengthNumber的愚蠢(IMO)方式。这个更好:

typeof obj.length == "number"
于 2013-02-14T16:30:07.530 回答
1

+ 将右侧的内容结合为数字。

在这种情况下,如果长度不是对象 undefined 的属性,则将返回。+ undefined将产生Nan,这个评估是错误的。

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

于 2013-02-14T16:33:38.737 回答