Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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 强令_Javascript - Fatal编程技术网

Javascript 强令

Javascript 强令,javascript,Javascript,我经常看到这个把戏 after = +after; 将之后的变量强制为数字。通过阅读,我发现了另一种方法: after *= 1; // coalesce to number or NaN 这两种方法在行为上是严格等价的吗?过了一会儿,我得出了这个结论。使用+运算符转换为数字的速度更快,因为在类型转换后不会发生数学运算,而使用*=方法意味着转换后将乘以1是。和(如*(从op=调用)都调用内部算法 您甚至可以通过静态调用以下命令来使用第三个选项: 注意:在某些情况下,after=after-0

我经常看到这个把戏

after = +after;
将之后的变量强制为数字。通过阅读,我发现了另一种方法:

after *= 1; // coalesce to number or NaN
这两种方法在行为上是严格等价的吗?

过了一会儿,我得出了这个结论。使用
+
运算符转换为数字的速度更快,因为在类型转换后不会发生数学运算,而使用
*=
方法意味着转换后
将乘以
1
是。和(如
*
(从
op=
调用)都调用内部算法

您甚至可以通过静态调用以下命令来使用第三个选项:


注意:在某些情况下,
after=after-0
调用的行为与
after=after+0
调用的行为不同。我注意到它和日期有关

这仅在Chrome v39中测试:

var date = new Date(2000,0,1);
date += date; //"Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)"
var date2 = new Date(2000,0,1);
date2 + 0; //"Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)0"
date2 - 0; //946684800000
date2 * 1; //946684800000
我不知道JS规范中定义了什么,但是关于日期,因为日期和数字都可以转换为字符串,并且+运算符可以处理字符串,然后Chrome使用字符串连接。因为-运算符没有等价的字符串,所以它返回到数字比较


我发现,当强制将日期转换为数字以进行比较时,这很有用,但是请注意,只有一元+运算符才能完成此操作。也就是说,
10+“10”
将为您提供
“1010”

一个可能不太容易出错的选项是使用asm.js的功能:

10 + ("10"|0)

虽然在下侧,它确实需要支架。在任何情况下,它都应该是最快的选项(可能等于一元+)。

所以没有行为差异,只有速度和语法?我不是专家,但我想我已经回答了与给定语法相关的问题。如果铸造是任何不同的运营商,我不知道。那就需要一个拥有远远超过我能力的极客!然而,第三个选项是最慢的:第三个选项是最能自我记录的。这将把数字转换成整数,而不仅仅是数字(即:
(“10.7”| 0)==10
)。如果只想将字符串转换为数字,请使用一元加号(
+“10.7”==10.7
),它与字符串相关。
10 + ("10"|0)