🎉Счастливого Биг Бена, дебют ES2019

JavaScript
🎉Счастливого Биг Бена, дебют ES2019

Всего 4 часа назад TC39 добавил в ES2019 следующие функции. Давайте посмотрим, какие изменения принесут нам эти новые функции.

1548822100255.jpg

Что нового в ES2019:

➡️ Массив#{flat,flatMap}

➡️ Object.fromEntries

➡️ Строка#{trimStart,trimEnd}

➡️ Символ#описание

➡️ try { } catch {} // необязательная привязка

➡️ JSON ⊂ ECMAScript

➡️ правильно сформированный JSON.stringify

➡️ стабильная сортировка массива

➡️ переработана функция#toString

JSON ⊂ Ecmascript (JSON SuperSet)

Разделение Разделение (U + 2028) и символ разделителя сегментов (U + 2029) теперь позволяют сопоставлять JSON в тексте строки. Ранее эти символы трактовались в тексте строки как завершение строки, поэтому они использовали их для возникновения аномалии SyntaxError.

well-formed JSON.stringify

Более дружественный JSON.stringify (исправлена ​​ошибка отображения для некоторых юникодов вне допустимого диапазона).

Если ввод в формате Unicode, но за пределами диапазона символов, JSON.stringify ранее возвращал искаженную строку Unicode:

JSON.stringify('\uD800');
// → '"�"'

Теперь реализует изменение JSON.stringify.Предложение этапа 3, поэтому он выводит escape-последовательности для него, делая его допустимым Unicode (и представленным в UTF-8):

JSON.stringify('\uD800');
// → '"\\ud800"'
在 chrome 控制台输出的是 '"\ud800"' ,但只是一个显示值, 真实值为'"\\ud800"'。

JSON.stringify('\uD800') === '"\\ud800"';
// → true

stable Array#sort

В предыдущем, в функции сортировки более 10 массивов V8 используется нестабильная Quicksort (быстрая строка. Теперь используйте стабильный алгоритм Timsort.)

Алгоритм TimSort:Что ж, Wikipedia.org/wiki/Тим или…

revised Function#toString

Function.prototype.toString()Теперь возвращаются точные символы, включая пробелы и комментарии. Сравнение старого и настоящего:

// Note the comment between the `function` keyword
// and the function name, as well as the space following
// the function name.
function /* a comment */ foo () {}

// Previously:
foo.toString();
// → 'function foo() {}'
//             ^ no comment
//                ^ no space

// Now:
foo.toString();
// → 'function /* comment */ foo () {}'

Array #{flat, flatMap}

Уменьшение размерности массива, рекурсивное сглаживание массива до указанной глубины, по умолчанию 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]
[2, 3, 4].flatMap((x) => [x, x * 2]);
// → [2, 4, 3, 6, 4, 8]

2019.1.31 Обновление

[2, 3, [2]].flatMap((x) => x + 1);
// [3, 4, "21"]

Я только что увидел, что кто-то сомневается в этом результате, думая, что внутри flatMap есть какая-то операция. На самом деле этоaddition-operator-plus(+)причина. + пройдетtoprimitiveПреобразуйте массив в базовый тип String. Итак, [2] + 1 переводится как «2» + 1 === «21». Вот доказательства:

Смена работы 39.GitHub.IO/ECcode262/#color… Смена работы 39.GitHub.IO/ECcode262/#color…


Object.fromEntries

Object.fromEntries(Object.entries(object)) ≈ объект

Это похоже на _.fromPairs в Lodash.

DYEuv5nW0AA5qHz.png

String#{trimStart,trimEnd}

Можно указать, что начальные и конечные пробелы должны быть удалены.

const string = '  hello world  ';
string.trimStart();
// → 'hello world  '
string.trimEnd();
// → '  hello world'
string.trim();
// → 'hello world'

Symbol.prototype.description

При создании символа с помощью фабричной функции Symbol() вы можете дополнительно указать строку в качестве описания через параметр:

const sym = Symbol('The description');

Раньше единственным способом доступа к описанию было преобразование символа в строку:

assert.equal(String(sym), 'Symbol(The description)');

Геттер Symbol.prototype.description теперь представлен для прямого доступа к описанию:

assert.equal(sym.description, 'The description');

try {} catch {}

Теперь try {} catch {} имеет более простой метод и становится необязательным.

До

try {} catch (e) {}

Сейчас

try-catch.png

Еще предложения:

GitHub.com/Job39/предложения…

Больше, пожалуйста, следите