Здесь мы обсудим некоторые функции ES7 и ES8:

Array.prototype.includes()

Array.prototype.includes немного похож на indexOf, но вместо индекса элемента возвращает значение true или false:

['a', 'b', 'c'].includes('a') // true, not 0 like indexOf
['a', 'b', 'c'].includes('d') // false

Возведение в степень

JavaScript представил сокращенный метод возведения в степень:

// 2 to the power of 8
Math.pow(2, 8) // 256

// exponentiation
2 ** 8 // 256

Завершающие запятые

Бывают случаи, когда конечная запятая полностью разрушает ваш код JavaScript в каком-то браузере. JavaScript теперь позволяет использовать дополнительную запятую:

let myObj = { a:'A', b: 'B', } // No error!

let myArr = [1, 2,] // No error!

[1, 2,].length // 2
[1, 2, 3, , , ,].length // 6

Объект.записи

Object.entries позволяет нам получить перечисляемые пары свойств объекта в формате массива ([ключ, значение]):

//Object literal
Object.entries({ 'a': 'A', 'b': 'B' }); // [["a","A"],["b","B"]]

// String
Object.entries('hey') // [["0","h"],["1","e"],["2","y"]

Object.entries следует тому же порядку, что и for...in.

Объект.значения

Object.keys возвращает массив ключей в объекте, тогда как Object.values возвращает массив значений:

// Object literal
Object.values({ 'a': A, 'b': B}) // [A, B]
// Array-like object (order not preserved)
Object.values({ a: 'A', b: 1, c: 'C' }) // [1, 'A', 'C']
// String
Object.values('hey') // ["h", "e", "y"]
// Array
Object.values([1, 2]) // [1, 2]

Object.values предоставляет записи значений в литералах объектов, массивах, строках и т. д.

String.prototype.padStart/padEnd

padStart и padEnd позволяют нам дополнить данную строку любым текстом по нашему выбору, чтобы убедиться, что строка соответствует заданной длине:

padStart syntax is padStart(desiredLength,textToPrepend);

padEnd syntax is padEnd(desiredLength,textToAppend);

// No text
''.padStart(10, 'Hi') // 'HiHiHiHiHi'
// Some text
'def'.padStart(6, 'abc') // 'abcdef'
// Only use what gets to length
'5678'.padStart(7, '1234') // '1235678'
'23'.padEnd(8, '0') // '23000000'

Одно из применений padStart может включать в себя добавление кода города к номеру телефона, если пользовательский ввод имеет неправильную длину. padEnd можно использовать для десятичной точности.

Асинхронные функции (асинхронные и ожидающие)

Промисы, которые мы используем для обработки асинхронных задач. Хотя промисы были лучше, чем ад обратных вызовов, они по-прежнему требуют большого количества then, что может привести к беспорядку. Появляются ключевые слова ES7async и await для упрощения обработки промисов. async — это ключевое слово для объявления функции. await используется во время обработки промисов. await должно использоваться в функции async. awaitasync функции возвращают промис, независимо от того, какое значение return находится внутри функцииasync/await, а промисы, по сути, одинаковы внутри.

// Before: callback hell!
fetch('/data.json')
  .then(response => response.json())
  .then(json => {
    console.log(json);
  })
  .catch(e => { console.log('Err!',e); })

// After: no more callbacks!
async function getJson() {
  try {
    let response = await fetch('/data.json');
    let json = await response.json();
    console.log(json);
  }
  catch(e) {
    console.log('Err!', e);
  }
}

Object.getOwnPropertyDescriptors()

Он возвращает все собственные (не унаследованные) дескрипторы свойств объекта. Атрибуты возвращаемого объекта могут быть: value, writable, get, set, configurable и enumerable.

const obj = {
    name: 'Pablo',
    get foo() { return 42; }
};
Object.getOwnPropertyDescriptors(obj);
//
// {
//  "name": {
//     "value": "Pablo",
//     "writable":true,
//     "enumerable":true,
//     "configurable":true
//  },
//  "foo":{
//     "enumerable":true,
//     "configurable":true,
//     "get": function foo()
//     "set": undefined
//  }
// }

Благодаря разным статьям в СМИ, которые помогли мне понять все это: D

Приятного чтения!