x | 0如何在JavaScript中添加数字?

use*_*294 10 javascript integer numbers floor

在我之前的问题中接受的答案(在javascript中生成随机整数的最快方法是什么?),我想知道一个数字如何通过符号丢失其小数| .

例如:

var x = 5.12042;
x = x|0;
Run Code Online (Sandbox Code Playgroud)

那个数字5到底是怎么回事?

更多例子:

console.log( 104.249834 | 0 ); //104
console.log( 9.999999 | 0 );   // 9
Run Code Online (Sandbox Code Playgroud)

Ham*_*ish 13

因为,根据ECMAScript规范,按位运算符运算符调用ToInt32要计算的每个表达式.

请参见11.10二进制位运算符:

生产A : A @B,其中@是上述产品中的一个按位运算符,评估如下:

  1. 评估A.

  2. 打电话GetValue(Result(1)).

  3. 评估B.

  4. 打电话GetValue(Result(3)).

  5. 呼叫 ToInt32(Result(2)).

  6. 呼叫 ToInt32(Result(4)).

  7. 将按位运算符@应用于Result(5)Result(6).结果是带符号的32位整数.

  8. 返回Result(7).


geo*_*org 5

按位运算符将其参数转换为整数(请参阅http://es5.github.com/#x9.5).我所知道的大多数语言都不支持这种类型的转换:

    $ python -c "1.0|0"
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: unsupported operand type(s) for |: 'float' and 'int'

    $ ruby -e '1.0|0'
    -e:1:in `': undefined method `|' for 1.0:Float (NoMethodError)

    $ echo "int main(){1.0|0;}" | gcc -xc -
    : In function ‘main’:
    :1: error: invalid operands to binary | (have ‘double’ and ‘int’)

  • `s/Most(.*?)不/强类型\ 1通常不/ /(但这是非常依赖于语言的.) (4认同)