J'ai fortement l'utilisation opérateurs au niveau du bit pour les conversions dans la production de scripts, parce que parfois ils sont beaucoup plus rapides que leurs Math
ou parseInt
équivalents.
Le prix que j'ai payer est la lisibilité du code. Donc, j'utilise généralement des Math
dans le développement et bit à bit dans la production.
Vous pouvez trouver quelques astuces sur la performance jsperf.com.
Comme vous pouvez le voir, les navigateurs ne pas optimiser Math.ceil
et parseInt
pendant des années, j'ai donc prévoir au niveau du bit sera plus rapide et plus courte façon de faire les choses dans furure ainsi.
Quelques lectures complémentaires sur le sujet DONC...
Bonus: feuille de triche pour | 0
: un moyen facile et rapide de convertir tout entier:
(désolé pour la russie commentaires, google translate peut vous aider)
( 3|0 ) === 3; // целые числа не изменяет
( 3.3|0 ) === 3; // у дробных чисел отбрасывает дробную часть
( 3.8|0 ) === 3; // не округляет, а именно отбрасывает дробную часть
( -3.3|0 ) === -3; // в том числе и у отрицательных дробных чисел
( -3.8|0 ) === -3; // у которых Math.floor(-3.3) == Math.floor(-3.8) == -4
( "3"|0 ) === 3; // строки с числами преобразуются к целым числам
( "3.8"|0 ) === 3; // при этом опять же отбрасывается дробная часть
( "-3.8"|0 ) === -3; // в том числе и у отрицательных дробных чисел
( NaN|0 ) === 0; // NaN приводится к нулю
( Infinity|0 ) === 0; // приведение к нулю происходит и с бесконечностью,
( -Infinity|0 ) === 0; // и с минус бесконечностью,
( null|0 ) === 0; // и с null,
( (void 0)|0 ) === 0; // и с undefined,
( []|0 ) === 0; // и с пустым массивом,
( [3]|0 ) === 3; // но массив с одним числом приводится к числу,
( [-3.8]|0 ) === -3; // в том числе с отбрасыванием дробной части,
( [" -3.8 "]|0 ) === -3; // и в том числе с извлечением чисел из строк,
( [-3.8, 22]|0 ) === 0 // но массив с несколькими числами вновь зануляется
( {}|0 ) === 0; // к нулю также приводится пустой объект
( {'2':'3'}|0 ) === 0; // или не пустой
( (function(){})|0 ) === 0; // к нулю также приводится пустая функция
( (function(){ return 3;})|0 ) === 0;
et un peu de magie pour moi:
3 | '0px' === 3;