我知道这很愚蠢,但无论如何我在SO中遇到了这段代码。
var total = 0;
for (var i = 0; i < someArray.length; i++) {
total += someArray[i] << 0;
}
这是得到数组值的总和。但我不明白最后一行。
total += someArray[i] << 0;
//-----^^--here
<<
的含义是什么?我一直都错过了什么。是的!!为什么<<
。
答案 0 :(得分:7)
所有 bitwise / bitshift operators都会在两个参数上调用[ToInt32]
。
因此,x << 0
(在这种情况下),x | 0
和~~x
具有将值强制转换为[0]内的整数的效果, 2 ^ 32)。
将此与+x
进行比较,{{1}}仅将x强制转换为数字。
答案 1 :(得分:5)
<<
和>>
是位移操作,取整数并将所有位(<<
)或右(>>
)移位1位。如果后跟另一个数字,则会发生这么多位的移位,因此256 << 4
将256
的位模式向左移位4位(从右边用四个零填充位模式)。
大多数编程语言都支持这些运算符,除非你编写的代码必须对(通常是超快)整数运算的位模式起作用,否则你通常没有理由使用它们。
作为JavaScript中的一个很好的怪癖,如果你对一个数字应用按位运算,它会被强制为一个整数,所以移位0位,或者将0或{0}运算,... | 0
将转为“一个数字“成32位整数。
答案 2 :(得分:1)
在您的示例中,左移bitwise operator用于将值强制为32位整数。在我刚刚链接的MDN页面中:
移位运算符以big-endian顺序将其操作数转换为32位整数,并返回与左操作数相同类型的结果。
通常,JavaScript中的数字是双精度浮点数。