Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript习语:如果(x==+;x)做什么?_Javascript_Arrays_Idioms_Triple Equals - Fatal编程技术网

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)