Javascript习语:如果(x==+;x)做什么?
阅读Javascript习语:如果(x==+;x)做什么?,javascript,arrays,idioms,triple-equals,Javascript,Arrays,Idioms,Triple Equals,阅读underline.js的源代码时,我偶然发现: 这让我有点困惑。这里实际比较的是什么?我相信它与检测本机阵列有关,但无法了解实际情况。+做什么?为什么使用===而不是==?这种样式的性能优势是什么?这是一种愚蠢的(IMO)检查obj.length是否为。这样更好: typeof obj.length == "number" +将值强制为一个数字(很像!!将其强制为布尔值) …可用于确认x本身包含整数值。在这种情况下,可能需要确保obj的length属性是一个整数,并且没有被字符串值覆盖,
underline.js的源代码时,我偶然发现:
这让我有点困惑。这里实际比较的是什么?我相信它与检测本机阵列有关,但无法了解实际情况。+
做什么?为什么使用===
而不是==
?这种样式的性能优势是什么?这是一种愚蠢的(IMO)检查obj.length
是否为。这样更好:
typeof obj.length == "number"
+
将值强制为一个数字(很像!!
将其强制为布尔值)
…可用于确认x
本身包含整数值。在这种情况下,可能需要确保obj
的length属性是一个整数,并且没有被字符串值覆盖,因为如果obj
被视为一个数组,这可能会破坏迭代。将右侧的内容聚合为一个数字
在这种情况下,如果长度不是未定义对象的属性,则将返回+undefined
将产生Nan
,且此评估为false
如果字符串可以内聚成一个数字,那么它将是。。e、 g+'1'
将产生1
作为数字
这在处理字符串形式的十六进制值时尤其重要,例如+'0x7070'
产生28784
为什么这很愚蠢?首选的替代方案是什么?我不认为这很愚蠢。也许它甚至比typeof
way.lazy还要快?对傻?不<代码>数字(对象长度)
要输入的内容太多了;)@SalmanA好吧,同样的事情也发生了。我对它的性能感到惊讶:JavaScript中没有整数。+'5.5'
是5.5
,你在寻找数字。(&@Salman,将在ES6中引入整数)准确地说,+
是parseFloat
的快捷方式,而不是parseInt
。所以它强制值为float(或“Number”类型)。我猜+“除数字外的所有事物”
的值也是NaN
?更新了我的答案以澄清!如果你还需要什么,请告诉我!
typeof obj.length == "number"
if (x === +x)