За несколько лет стандарты ECMAScript совершили революцию и сделали JavaScript лучше и проще в написании, а также сделали его основным действующим лицом современных веб-технологий, таких как Node.js, React, Angular js, Vue.jsи так далее.

ES2019 (также известный как ECMAScript 2019) имеет некоторые основные и второстепенные функции, которые были одобрены комитетом TC39 и станут частью спецификации ECMAScript 2019.

Вы можете проверить TC39 Github Repo, чтобы узнать больше об этом, а также вы можете проверить официальный список функций ECMAScript в списках репозиториев TC39 готовые предложения.

Основные новые функции:

Незначительные новые функции:

Изменения, в основном внутренние:

Теперь взгляните на новые функции на примерах:

Array.prototype.{flat}первоначально предложенный какArray.prototype.flatten, рекурсивно сглаживает массивы до указанной глубины, которая по умолчанию равна 1

// Flatten one level:
const array = [1, [2, [3]]];
array.flat();
// → [1, 2, [3]]

// Flatten recursively until the array contains no more nested arrays:
array.flat(Infinity);
// → [1, 2, 3]

Array.prototype.{flatMap}который похож наArray.prototype.map, за исключением того, что он объединяет результат в новый массив.

[2, 3, 4].flatMap((x) => [x, x * 2]);
// → [2, 4, 3, 6, 4, 8]

Предложение по новому статическому методуObject.fromEntriesв ECMAScript для преобразования списка пар "ключ-значение" в объект.

obj = Object.fromEntries([['a', 0], ['b', 1]]); // { a: 0, b: 1 }

МетодtrimStart()удаляет пробелы в начале строки.

МетодtrimEnd()удаляет пробелы в конце строки.

var hello = "   Hello World!   "
console.log(JSON.stringfy(hello.trimStart()))
//"Hello World!   "
console.log(JSON.stringfy(hello.trimEnd()))
//"   Hello World!"

Symbol.prototype.description:доступное только для чтения свойство description представляет собой строку, возвращающую необязательное описание «Symbol. " объекты.

var sym = "My Symbol"
var symObj = Symbol(mySymbol)
console.log(symObj) //Symbol(sym)
console.log(String(symObj) === `Symbol(${sym})`) //true
console.log(symObj.description) //My Symbol

Необязательная привязка Catch. Разрешите разработчикам использовать try/catch без создания неиспользуемой привязки.

try {
    ···
} catch {
    ··· //no parameters needed
}

Array.prototype.sort: предыдущая реализацияV8 использовала нестабильныйалгоритм быстрой сортировки для массивов, содержащих более 10 Предметы.

Алгоритм стабильной сортировки — это когда два объекта с одинаковыми ключами появляются в отсортированном выводе в том же порядке, что и в несортированном вводе.

Но это уже не так. ES10 предлагает стабильную сортировку массива:

var vegetables= [
    { name: "tomato", count: 13, },
    { name: "cucumber", count: 12, },
    { name: "eggplant", count: 12, },
    { name: "carrot", count: 11, },
    { name: "onion", count: 11, },
    { name: "pepper", count: 10, },
    { name: "potatoe", count: 10, }
];
// Create our own sort criteria function:
let my_sort = (a, b) => a.count - b.count;// Perform stable ES10 
sort:
let sorted = vegetables.sort(my_sort);
console.log(sorted);

Вывод в консоль(элементы отображаются в обратном порядке):

Правильный формат JSON.stringfy:Предложение по предотвращению возврата JSON.stringfy некорректных строк Unicode.

// Non-BMP characters still serialize to surrogate pairs.
JSON.stringify('𝌆')
// → '"𝌆"'
JSON.stringify('\uD834\uDF06')
// → '"𝌆"'

// Unpaired surrogate code units will serialize to escape sequences.
JSON.stringify('\uDF06\uD834')
// → '"\\udf06\\ud834"'
JSON.stringify('\uDEAD')
// → '"\\udead"'

Расширенный набор JSON:ECMAScript заявляет, что JSON является подмножеством в JSON.parse, но (как было хорошо задокументировано) это неверно, поскольку строки JSON могут содержать неэкранированные символы U+2028. LINE SEPARATOR и U+2029 PARAGRAPH SEPARATOR символы, в то время как строки ECMAScript не могут.

Эти исключения усложняют спецификацию и увеличивают когнитивную нагрузку как на разработчиков, так и на пользователей, позволяя вносить незаметные ошибки. Кроме того, как меньшая, но конкретная вытекающая из этого проблема, некоторые задачи конкатенации и построения исходного кода в настоящее время требуют дополнительных шагов для преобразования действительного JSON в действительный ECMAScript перед его внедрением.

  • До недавнего времени строковые литералы ECMAScript не могли содержать символы U+2028 LINE SEPARATOR и U+2029 PARAGRAPH SEPARATOR (вы должны были использовать управляющую последовательность, чтобы поместить их в строку). То есть следующий исходный код выдал синтаксическую ошибку:

const sourceCode = '"\u2028"'; eval(sourceCode); // SyntaxError

  • Строковые литералы JSON могут содержать следующие два символа:

const json = '"\u2028"'; JSON.parse(json); // OK

Учитывая фиксированный синтаксис JSON, было принято решение снять ограничение для строковых литералов ECMAScript. Это упрощает грамматику спецификации, поскольку вам не нужны отдельные правила для строковых литералов ECMAScript и строковых литералов JSON.

Редакция Function.prototype.toString:Function.prototype.toString() была изменена в новом предложении. В более ранних версиях ECMAScript исходный код функции можно было распечатать с помощью toString(), но имелся недостаток, заключающийся в том, что при этом удаляются все лишние пробелы и комментарии. В новом предложении он сохранен.

function /* foo comment */ hello() {}

foo.toString(); // "function hello() {}"

и теперь это:

foo.toString(); // "function /* foo comment */ foo() {}"

Начиная с V8 v7.3/Chrome 73 все эти функции ES2019 доступны по умолчанию. Наслаждаться!

Если вам понравилась эта статья, поделитесь ею и похлопайте 👏 👏. Спасибо!