Существуют два вида вещей, которые вводят новые функции Javascript: синтаксис и встроенные объекты / методы .
Когда вы переносите (например, с Typescript или из ESNext в ES5), вы переводите синтаксис вашего кода из исходной версии в ES5. Например:
const foo = 'foo'; // ES6 syntax
может стать
var foo = 'foo'; // ES5 syntax
Это не влияет на несинтаксические функции. Следующий синтаксис в ES5 совершенно законен:
console.log(foo.endsWith('o'));
Но то, что синтаксис допустим, не обязательно означает, что то, к чему относится foo
, обладает свойством endsWith
.
Эти несинтаксические функции не требуют транспиляции , а скорее полизаполнения - то есть, если они не существуют в среде, определите их самостоятельно. Например, один из возможных polyfill для endsWith
равен :
if (!String.prototype.endsWith) {
String.prototype.endsWith = function(search, this_len) {
if (this_len === undefined || this_len > this.length) {
this_len = this.length;
}
return this.substring(this_len - search.length, this_len) === search;
};
}
Если вы убедитесь, что приведенный выше код работает, вы не получите ошибку Property 'endsWith' does not exist on type 'string'
.
Большинство новых объектов / методов могут быть заполнены, но некоторые не могут быть, по крайней мере, не совсем точно (например, Symbol
s и Proxy
x, IIRC).
Популярный сервис, который предоставляет полифилы для многих новых объектов / методов: polyfill.io .
Чтобы устаревшие браузеры могли понимать ваш код, написанный на ESNext (или Typescript), используйте и , и polyfills.