我知道这很愚蠢,但无论如何我在这里遇到了这段代码。
var total = 0;
for (var i = 0; i < someArray.length; i++) {
total += someArray[i] << 0;
}
这是获取数组值的总和。但我不明白最后一行。
total += someArray[i] << 0;
//-----^^--here
什么<<
意思?这段时间我是不是错过了什么。是的!!为什么<<
。
我知道这很愚蠢,但无论如何我在这里遇到了这段代码。
var total = 0;
for (var i = 0; i < someArray.length; i++) {
total += someArray[i] << 0;
}
这是获取数组值的总和。但我不明白最后一行。
total += someArray[i] << 0;
//-----^^--here
什么<<
意思?这段时间我是不是错过了什么。是的!!为什么<<
。
<<
和>>
是位移操作,取一个整数并将所有位向左 ( <<
) 或向右 ( >>
) 移动 1 位。如果后跟另一个数字,则移位发生在那么多位上,因此256 << 4
将位模式256
向左移动 4 位(从右侧用四个零填充位模式)。
大多数编程语言都支持这些运算符,除非您编写的代码必须针对(通常是超快速的)整数运算的位模式进行操作,否则您通常没有理由使用它们。
作为 JavaScript 中的一个很好的怪癖,如果你对一个数字应用按位运算,它会被强制为一个整数,所以移动 0 位,或者用 0 进行 or 操作,... | 0
会将“一个数字”变成一个 32 位整数。
在您的示例中,左移位运算符用于将值强制转换为 32 位整数。从我刚刚链接的 MDN 页面:
移位运算符以大端顺序将其操作数转换为 32 位整数,并返回与左操作数相同类型的结果。
通常,JavaScript 中的数字是双精度浮点数。