(я полностью согласен с Джоша ответ:. За ясный ремонтопригодны код)
Вот объяснение на других побитовое подходов:
Бит-накрест операторы работают, потому что они только оператора на 32-битных (подписанных) целых числах, но числа в JavaScript - все значения IEEE-754. Таким образом, существует внутреннее преобразование (усечение, а не пол!), Которое происходит с операндами для бит-мудирующих операторов.
Применяемая побитовое операции (например, n<<0
, ~~n
или n|0
), то действует как функция идентичности которой «ничего не делает» для преобразованных значений: то есть, все эти подходы опираются на той же конверсии применительно к бит-мудрых операндов.
Попробуйте n
в виде отрицательного числа или значения за пределами [-2 , 2 -1]:
(-1.23|0) // -1
Math.floor(-1.23) // -2
var x = Math.pow(2, 40) + .5
x|0 // 0
Math.floor(x) // 1099511627776
Дня кодирование.
http://stackoverflow.com/questions/2526682/why-is-javascripts-math-floor-the-slowest-way-to-calculate-floor-in-javascript, http://stackoverflow.com/questions/9049677/how-do-x0-floor-the-number-in-javascript –
В конечном итоге не будет никакой разницы, поскольку браузеры будут развиваться, см. Согласованную производительность хрома http://jsperf.com/math-floor-vs- math-round-vs-parseint/41, лучше писать код поддерживаемого кода – ajax333221
@ ajax333221 Мне просто нравится, как выглядит IE-запись, поскольку она отсутствует данные ;-) –