Swer писал(а):
Подскажите в чём разница ?
Код:
var a = -875.23423452;
console.log( Math.trunc( a ) ); // -875
console.log( a|0 ); // -875
Зачем нужна функция Math.trunc ?
// 1
Math.trunc()
https://developer.mozilla.org/ru/docs/W ... Math/truncметод Math.trunc() работает очень просто и прямолинейно: отбрасывает десятичную запятую и все цифры после неё, не обращая внимания на знак аргумента.
// 2
console.log( a|0 ); // -875
знак | это оператор побитовой операции ИЛИ
во-первых, десятичная часть, отбрасывается, если есть, а у нас есть
-875.23423452 -> -875
получаем это
( -875|0 )
дальше числа из десятичного вида представляются в 32-битном виде, но
для простоты я возьму число из 8-битного диапазона, а то придется записывать 32 числа
буру любое число от от 0 до 255, например 42
по аналогии (42 | 0)
переведем 42 и ноль из десятичного в двоичный
произведем операцию ИЛИ
0 | 0 -> 0
0 | 1 -> 1
1 | 0 -> 1
1 | 1 -> 1
42 -> 00101010
0 -> 00000000
--------------
00101010
мы получили 00101010, это результат побитовой операции ИЛИ
а 00101010 это 42
значит результат в десятичном виде это 42
какая будет разница?
1) не многие поймут второй вариант, такое я редко встречаю, это не есть ясный код
2) первый вариант имеет проблему с отсутствием совместимости со многими старыми версиями браузеров, значит у кого-то может крашнуться код
что делать?
использовать полифилл (типо fallback, но не fallback)
например:
Код:
if (!Math.trunc) {
Math.trunc = function(v) {
v = +v;
return (v - v % 1) || (!isFinite(v) || v === 0 ? v : v < 0 ? -0 : 0);
};
}
но это муторно копировать вставлять, еще нужно быть уверенным, что ты не забыл полифилл для какой-нибудь функции
поэтому проще добавить es-shim.js библиотеку к проекту
https://github.com/es-shims/es5-shimhttps://github.com/paulmillr/es6-shimминус один, лишних поллифилов нагребешь
по-этому если шаришь, то нужно смотреть в сторону Babel.js