什么`<<``语法在Javascript中意味着什么?

时间:2013-06-20 21:16:12

标签: javascript

我知道这很愚蠢,但无论如何我在SO中遇到了这段代码。

var total = 0;
for (var i = 0; i < someArray.length; i++) {
   total += someArray[i] << 0;
}

这是得到数组值的总和。但我不明白最后一行。

total += someArray[i] << 0;
               //-----^^--here

<<的含义是什么?我一直都错过了什么。是的!!为什么<<

3 个答案:

答案 0 :(得分:7)

下一个问题是“为什么&lt;&lt; 0”?

JavaScript中的

所有 bitwise / bitshift operators都会在两个参数上调用[ToInt32]

因此,x << 0(在这种情况下),x | 0~~x具有将值强制转换为[0]内的整数的效果, 2 ^ 32)。

将此与+x进行比较,{{1}}仅将x强制转换为数字。

答案 1 :(得分:5)

<<>>是位移操作,取整数并将所有位(<<)或右(>>)移位1位。如果后跟另一个数字,则会发生这么多位的移位,因此256 << 4256的位模式向左移位4位(从右边用四个零填充位模式)。

大多数编程语言都支持这些运算符,除非你编写的代码必须对(通常是超快)整数运算的位模式起作用,否则你通常没有理由使用它们。

作为JavaScript中的一个很好的怪癖,如果你对一个数字应用按位运算,它会被强制为一个整数,所以移位0位,或者将0或{0}运算,... | 0将转为“一个数字“成32位整数。

答案 2 :(得分:1)

在您的示例中,左移bitwise operator用于将值强制为32位整数。在我刚刚链接的MDN页面中:

  

移位运算符以big-endian顺序将其操作数转换为32位整数,并返回与左操作数相同类型的结果。

通常,JavaScript中的数字是双精度浮点数。