2016-12-01 3 views
0

У меня возникли проблемы с javascript на рабочем столе Safari, на мобильном устройстве работает нормально.Ошибка Javascript на Safari

Когда я пытаюсь запустить:

return Math.trunc(num * Math.pow(10, 2))/Math.pow(10, 2); 

Я получаю на консоли:

TypeError: 'undefined' is not a function (evaluating 'Math.trunc(num * Math.pow(10, 2))') 

Любая идея, почему это может быть? На остальных браузерах работает отлично, и я не знаю, почему (я никогда не работал с сафари).

+0

строго требуется, то есть, является округление отрицательных чисел ожидается округление к нулю? – LutzL

ответ

3

Math.trunc был добавлен в ES2015 (июнь 2015 г.). Очевидно, что JavaScript-движок в версии Safari, который вы используете, еще не имеет этого.

Вы можете polyfill его, если он отсутствует:

if (!Math.trunc) { 
    Object.defineProperty(Math, "trunc", { 
     value: function(val) { 
      return val < 0 ? Math.ceil(val) : Math.floor(val); 
     } 
    }); 
} 
+1

[Согласно MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc) он находится в Safari 7.1, хотя мы не знаем, какая версия браузера это попытка OP. – vlaz

+0

Safari => 7.1 должен иметь его. – SSA

+0

Хорошо, есть ли альтернатива для этой функции? Я видел «Math.Floor», но не совсем то же самое: –

0

насчет return ~~(num * Math.pow(10, 2))/Math.pow(10, 2);?

~~ оператор кажется хорошей заменой для Math.trunc()

+0

... за исключением того, что он будет терпеть неудачу для больших чисел, так как он требует кругового путешествия через подписанное 32-битное целое число. И если это не проблема, есть более простой способ: 'num | 0'. –

Смежные вопросы