Оператор побитового ИЛИ
Побитовый или оператор может использоваться для усечения чисел с плавающей запятой, и он работает как для положительных, так и для отрицательных значений:
function float2int (value) {
return value | 0;
}
Результаты
float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3
Сравнение производительности?
Я создал JSPerf тест , который сравнивает производительность между:
Math.floor(val)
val | 0
по битам ИЛИ
~~val
по битам НЕ
parseInt(val)
, который работает только с положительными числами. В этом случае вы можете безопасно использовать побитовые операции, а также функцию Math.floor
.
Но если вам нужен код для работы с положительными и отрицательными значениями , то побитовая операция является самой быстрой (ИЛИ предпочтительной). Этот другой тест JSPerf сравнивает то же самое, где совершенно очевидно, что из-за дополнительной проверки знака Math теперь самый медленный из четырех.
Примечание
Как указано в комментариях, операторы BITWISE работают со 32-разрядными целыми числами со знаком, поэтому будут преобразованы большие числа, например:
1234567890 | 0 => 1234567890
12345678901 | 0 => -539222987