День 5 изучения JavaScript — этап 1

Эта статья написана немного на основе учебника Leanpub — Understanding ES6. Для получения дополнительных объяснений и примеров, не стесняйтесь посетить веб-сайт.

1. Блочные привязки: замените IIFE, используя «let».

Мы можем заменить IIFE и получить тот же результат, объявив let внутри цикла. В блочной привязке для более чистого кода мы можем использовать let вместо var, в отличие от IIFE. Что делает IIFE, так это объявляет переменную цикла как var. Функция for внутри цикла может каждый раз получать и удерживать новую привязку, объявление переменной цикла letfor сделает работу удобной и легкой.

Пример:

переменные числа = [];

для (пусть i = 0; i ‹ 10; i++) {

числа .push (функция () {

console.log(я);

});

}

nums.forEach (функция (число) {

номер(); // выводит 0, затем 1, затем 2, вплоть до 9

})

2. Декларация уровня блока: временная мертвая зона

Подъем позволяет нам получить доступ к переменной до ее объявления. Но, к сожалению, он доступен только для переменной, объявленной как var. Для переменной, объявленной с помощью let или const, подъем запрещен и вызовет ошибку.

Поскольку движок браузера JS помещает объявление во временную мертвую зону или TDZ (для let и const). Если мы хотим получить доступ к переменной в TDZ, это вызовет ошибку времени выполнения. Мы можем обосновать это простой операцией, используя typeOf().

Пример:

if ( — -) {

console.log(тип цвета); // Ошибка ссылки!

пусть цвет = «красный»;

}

3. Значения параметров ES6 по умолчанию влияют на объект arguments

Хотя в ES5 невозможно получить ожидаемый результат arguments без использования строгого режима, ES6 предоставляет волшебное решение, просто используя параметр по умолчанию в функции. Параметр по умолчанию отделяет объект arguments от именованных параметров.

Пример:

функциональный тест (один, два = «b») {

console.log(аргументы.длина); // 1

console.log(один === аргументы [0]); // истинный

console.log(два аргумента ===[1]); // false, arguments[1] не определено

первый = «с»;

секунда = «д»

console.log(первый === аргументы [0]); // ложный

console.log(второй === аргументы[1]); // ложный

}

тест("а");

4. Функции: замена apply() на оператор спреда

Когда нам нужно найти значение из массива из нескольких элементов, поиск по массиву в ES5 был довольно запутанным. В одном из решений использовался метод apply(), но он создает лишний синтаксис и портит первоначальную суть кода. В ES6 мы можем сделать это, просто используя оператор spread (…).

Пример 1 (ES5):

пусть значения = [170, 30, 23, 100];

console.log(Math.max.apply(Math, values)); // 170

Пример 2 (ES6):

пусть значения = [170, 30, 23, 100];

console.log(Math.max(…значения)); // 170

5. Функции блочного уровня ES6 в нестрогом режиме

ES6 также поддерживает подъем объявлений. Но в нестрогом режиме объявления поднимаются в глобальную среду, а не в верхнюю часть блочного уровня.

Пример:

если правда) {

console.log(тест типа); // «функция»

функциональный тест () {

// код тела функции

}

контрольная работа();

}

console.log(тест типа); // «функция»

6. Стрелочные функции и массивы

ES6 предоставляет мощную функцию под названием Arrow function (=›). Он заменяет традиционный длинный функциональный блок и делает код чище. Обработка элементов массива [.., .., ..] с помощью стрелочной функции(=›) намного проще, чем объявление традиционной функции.

Пример 1 (традиционная функция):

пусть значения = [170, 30, 23, 100];

var результат = values.sort (функция (а, б) {

вернуть а - б;

});

результат // [23, 30, 100, 170]

Пример 2 (функция стрелки):

пусть значения = [170, 30, 23, 100];

var result = values.sort((a, b) =› a - b);

результат // [23, 30, 100, 170]

7. Деструктивное присвоение, обмен ценностями

Деструктуризация — это метод разрушения необходимой структуры данных. Используя деструктуру массива, поменять местами значения массива намного проще без какой-либо третьей переменной. Мы можем деструктурировать массив, используя квадратные скобки [] слева от оператора присваивания (=) и переменную массива справа.

Пример 1 (с использованием третьей переменной – ES5):

пусть а = 1, b = 2, темп;

темп = а;

a = b;

б = температура;

console.log(а); // 2

console.log(б); // 1

Пример 2 (с использованием деструктурирования массива — ES6):

пусть а = 1, Ь = 2;

[ a, b ] = [ b, a ];

console.log(а); // 2

console.log(б); // 1

8. «…остальные элементы» упрощают клонирование массива

Невероятно, что клонирование элемента массива настолько проще, чем мы думаем в ES6. До того, как разработчики ES6 использовали метод concat() для клонирования элемента массива, но первоначальная цель функции concat(), определенно не массив клонов. А вот и '... остальные элементы'. Просто назначив массив переменной [… rest items], вы клонируете весь массив без каких-либо ошибок.

Пример:

пусть фрукты = [ "манго", "апельсин", "ананас" ];

пусть [ …clonedFruits ] = фрукты;

console.log(клонированные фрукты); // ["манго", "апельсин", "ананас"]

9. Класс: граждане первого класса ES6

Первоклассные граждане или первоклассные функции в ES6 делают JavaScript уникальным по сравнению с другими языками. Эта уникальная функция обеспечивает ожидаемые значения:

i) передается в функцию,

ii) возвращается из функции, и

iii) присваивается переменной.

Пример:

функциональный тест (демокласс) {

вернуть новый demoClass();

}

пусть x = тест (класс {

скажите что-то() {

console.log("Доброе утро!");

}

});

х.скажи что-нибудь();

10. Класс: свойства доступа

Свойство класса всегда должно формироваться внутри конструктора этого класса. В ES6 разрешено определять свойства доступа в прототипе класса. Класс использует метод геттера и установщика для упрощения доступа к свойству.

Пример:

Метод Object.getOwnPropertyDescriptor() возвращает дескриптор свойства для собственного свойства (ссылка: MDN).

класс CustomHTMLElement {

конструктор (элемент) {

этот.элемент = элемент;

}

получить HTML() {

вернуть this.element.innerHTML;

}

установить HTML (значение) {

this.element.innerHTML = значение;

}

}

дескриптор var = Object.getOwnPropertyDescriptor(CustomHTMLElement.prototype, «html»);

console.log («получить» в дескрипторе); // истинный

console.log («установить» в дескрипторе); // истинный

console.log(дескриптор.enumerable); // ложный