использование побитового ИЛИ в javascript для преобразования в целое число

мы можем сделать следующее для преобразования:

var a = "129.13"|0,  // becomes 129

var b = 11.12|0; // becomes 11

var c = "112"|0; // becomes 112

Кажется, это работает, но не уверен, что это стандартная функция JS. Кто-нибудь знает, безопасно ли это использовать для преобразования строк и десятичных знаков в целые числа?


person sbr    schedule 02.10.2012    source источник
comment
Я полагаю, это не было для вас достаточно сложным?   -  person Madara's Ghost    schedule 02.10.2012
comment
См. спецификацию ECMAScript для побитовых операторов: ecma-international.org/ecma-262. /5.1/#sec-11.10. Обратите внимание, что ввод (и, следовательно, вывод также) преобразуется в Int32.   -  person apsillers    schedule 02.10.2012
comment
@MadaraUchiha не совсем понял, что вы имеете в виду, но спасибо за ссылку   -  person sbr    schedule 02.10.2012


Ответы (1)


Да, это стандартное поведение. Побитовые операторы работают только с целыми числами, поэтому они преобразуют любое число, которое они дают, в 32-битное целое число со знаком.

Это означает, что максимальный диапазон равен 32-битному целому числу со знаком минус 1, что равно 2147483647.

(Math.pow(2, 32) / 2 - 1)|0; // 2147483647

(Math.pow(2, 32) / 2)|0; // -2147483648 (wrong result)
person I Hate Lazy    schedule 02.10.2012