什么是这个asm风格"x | 0"一些javascript程序员现在正在使用?

Dio*_*nco 13 javascript optimization bit-manipulation asm.js vm-implementation

我已经看到了一些性能关键的javascript代码,就像这个项目中的那个,它大量使用0的按位OR运算.例如:

GameBoyAdvanceCPU.prototype.write8 = function (address, data) {
address = address | 0;
data = data | 0;
this.memory.memoryWrite8(address | 0, data | 0);
Run Code Online (Sandbox Code Playgroud)

我知道地板数字的用例是"| 0",但这不是这里的情况,因为它们总是int.它看起来有点像asm.js,这是告诉js引擎我们正在使用整数,允许一些优化吗?如果是这样,哪些浏览器会进行优化?

任何关于它如何工作的指针都会被认可.

Mic*_*mza 6

根据Madmen的JavaScript性能

包装整数算术表达式( ) | 0允许运行时确保您正在进行整数运算而不是浮点运算.这允许它在许多情况下避免检查溢出并产生更快的代码.

并且根据页面,"大多数"Javascript运行时都是如此,但是没有说明哪个.

作为第二个来源,写作快速的JavaScript对于游戏和交互式应用程序 状态

要告诉JavaScript引擎我们要存储整数值[...]我们可以使用按位或运算符:

以及Microsoft编写高效JavaScript页面的第三个来源:

[...]明确告诉JavaScript运行时使用整数算术[...]使用按位或运算符

此外,除了评论之外,上面没有一个页面提到asm.js,所以我怀疑这种优化适用于未明确标识为asm /的代码中未明确识别它的浏览器.


小智 -2

| 运算符是按位 OR它用于对两个整数进行逐位或运算。

这里的用法是一个与逻辑 OR ||非常相似的快捷方式。运算符提供默认值,但结果仅为整数(而不是字符串...等)

address = address | 0;
Run Code Online (Sandbox Code Playgroud)

意思是“如果地址是数字,就使用它;否则,将其设置为 0”。