Как решить в IE11: объект не поддерживает свойство или метод 'padStart' - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть код, который преобразует временные интервалы (суммы и средние значения) в формат «чч: мм: сс», где угодно, кроме IE 11, где я получаю эту ошибку:

SCRIPT438: объект не поддерживает свойство или метод 'padStart'

Как мне переписать этот код, чтобы он работал?

var times = [3600000, 60000, 1000];

function formatTime(avg) {
    return times.map(function (t) {
        var value = Math.floor(avg / t);
        avg %= t;
        return value;
    }).map(function (v) {
        return v.toString().padStart(2, 0);
    }).join(':');
}

console.log(formatTime(32939000)); // 09:08:59

padStart(2, 0) вызывается в последнем операторе return. Как я могу заставить его работать в IE11?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Согласно документации MDN для padStart, Internet Explorer не поддерживает эту функцию. Тем не менее, они также предоставляют polyfill , который добавит padStart, если он отсутствует. Просто добавьте блок кода в начало вашей программы, и вы получите padStart в любом браузере.

// https://github.com/uxitten/polyfill/blob/master/string.polyfill.js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
if (!String.prototype.padStart) {
    String.prototype.padStart = function padStart(targetLength, padString) {
        targetLength = targetLength >> 0; //truncate if number, or convert non-number to 0;
        padString = String(typeof padString !== 'undefined' ? padString : ' ');
        if (this.length >= targetLength) {
            return String(this);
        } else {
            targetLength = targetLength - this.length;
            if (targetLength > padString.length) {
                padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
            }
            return padString.slice(0, targetLength) + String(this);
        }
    };
}

(предыдущий код находится в свободном доступе, согласно MDN о странице .)

1 голос
/ 01 апреля 2019

Для вашего конкретного случая - когда вы имеете дело с частями времени (часы, минуты, секунды), которые имеют 1 или 2 цифры - вы можете заменить:

return v.toString().padStart(2, 0);

с:

return ("0" + v).slice(-2);

var times = [3600000, 60000, 1000];

function formatTime(avg) {
    return times.map(function (t) {
        var value = Math.floor(avg / t);
        avg %= t;
        return value;
    }).map(function (v) {
        return ("0" + v).slice(-2);
    }).join(':');
}

console.log(formatTime(32939000)); // 09:08:59
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...