Согласно спецификации ECMAScript , возвращаемые значения от побитовых операций должны быть 32-разрядными целыми числами. Соответствующая цитата:
Производство A : A @ B
, где @
один из побитовых операторов в
продукция выше, оценивается как
следует:
- Пусть
lref
будет результатом оценки A
.
- Пусть
lval
будет GetValue(lref)
.
- Пусть
rref
будет результатом оценки B
.
- Пусть
rval
будет GetValue(rref)
.
- Пусть
lnum
будет ToInt32(lval)
.
- Пусть
rnum
будет ToInt32(rval)
.
- Вернуть результат применения побитового оператора
@
к lnum
и rnum
.
Результатом является 32-разрядное целое число со знаком.
Поэтому, чтобы преобразовать любое число в 32-разрядное целое число, вы можете просто выполнить двоичную операцию, которая не будет иметь никакого эффекта. Например, здесь я преобразовываю число с плавающей точкой в целое число, используя двоичный код без операции, или (| 0
):
var x = 1.2, y = 1
x = x | 0
alert(x == y) # prints "true"