强迫数字

Ran*_*lue 19 javascript

我经常看到这个伎俩

after = +after;
Run Code Online (Sandbox Code Playgroud)

将变量强制after转换为数字.通过Node.JS源读取我发现了另一种方法:

after *= 1; // coalesce to number or NaN
Run Code Online (Sandbox Code Playgroud)

这两种方法的行为是否完全相同?

Fab*_*tté 25

是.两个一元运算符+乘法运算符,例如*(来自称为复合赋值 op=)调用内部ToNumber算法.

你甚至可以通过静态调用Number构造函数来使用第三个选项:

after = Number(after);
Run Code Online (Sandbox Code Playgroud)

  • 第三种选择是迄今为止最慢的选择:http://jsperf.com/testing-number-coercion (3认同)
  • 第三个选项是最自我记录的。 (2认同)

chr*_*her 5

经过快速谷歌确保我的怀疑是真的,我得出了这个结论.使用+运算符转换为数字更快,因为在类型转换后没有发生数学运算,而使用该*=方法意味着after转换后,它将乘以1.