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)