Основное обновление ES6 (ES2015) для стандарта сценариев было предложено членами комитета ECMA в 2016 году. ES5 уже широко внедрен в большинстве современных браузеров. Некоторые выделенные новые функции обсуждаются ниже.
Хотя ES6 все еще находится на ранних стадиях внедрения, требуется использовать транспилятор, такой как Babel (популярный), для написания эффективного обратно совместимого кода javascript, который преобразует ES6 в ES5, понятный устаревшим браузерам (IE 11).
Const
Константа, которую нельзя изменить после назначения.
Старый
var isES6 = false isES6 = true console.log(isES6) //true
Новый
const isES6 = true isES6 = false console.log(isES6) // Uncaught TypeError : Assignment to constant variable
Позволять
Переменная с областью видимости блока, то есть она доступна только в том блоке, в котором она объявлена.
Старый
var topic = ‘javascript’ if(topic) { var topic = ‘react’ console.log(‘block’,topic) // block react } console.log(‘global’,topic); // global react
Новый
var topic = ‘javascript’ if(topic) { let topic = ‘react’ console.log(‘block’,topic) // block react } console.log(‘global’,topic); // global javascript
Строки шаблона
Это простой способ объединить строки, а также вставить в них переменную. Он учитывает пробелы, шаблон многострочной строки.
Старый
var firstName = ‘Piyush’ var lastName = ‘Johnson’ console.log(firstName + ‘ ‘ + lastName); // Piyush Johnson
Новый
var firstName = ‘Piyush’ var lastName = ‘Johnson’ console.log(`${firstName} ${lastName}`); // Piyush Johnson
Параметр по умолчанию
В функции можно использовать значение параметра по умолчанию, если оно не указано в аргументе.
Старый
function logActivity(name,activity) { console.log(`${name} did ${activity}`) } logActivity() // “undefined did undefined”
Новый
function logActivity(name=’Guest’,activity=’general’) { console.log(`${name} did ${activity}`) } logActivity() // Guest did general
Стрелочные функции
Стрелку можно создать без ключевого слова функции, также не обязательно использовать ключевое слово return в большинстве случаев.
Старый
var fruits = { print: function(delay=1000)=> { setTimeout(() => { console.log(this === window) }, delay) } } fruits.print() // true
Новый
var fruits = { print: (delay=1000)=> { setTimeout(() => { console.log(this === window) }, delay) } } fruits.print() // false
Стрелочная функция всегда связывается с непосредственным верхним контекстом, который во втором случае является оконным объектом.
Разрушение присвоения
Это позволяет локально объявить некоторые или все поля любого объекта, которые будут использоваться позже.
Старый
function greeting(person) { console.log(`Hello, {person.firstName}`) } greeting({‘Piyush’,’Johnson’}) // Hello Piyush
Новый
function greeting({firstName}) { console.log(`Hello, {firstName}`) } greeting({‘Piyush’,’Johnson’}) // Hello Piyush Johnson
Значения также могут быть извлечены из массивов, которые будут использоваться позже. Уничтожение более декларативно, т.е. код более нагляден.
Улучшение литерала объекта
Это наоборот - разрушение, то есть реструктуризация переменных в объект javascript, превращение глобальных переменных в объекты.
Старый
function createPerson(name,age) { return {name: name,age: age}; } var p = createPerson(‘Piyush’,20); console.log(p) // {name: ‘Piyush’,age: 20}
Новый
function createPerson(name,age) { return {name,age}; } var p = createPerson(‘Piyush’,20); console.log(p) // {name: ‘Piyush’,age: 20}
Оператор распространения
Это сокращенный синтаксис для сопоставления значений от исходного объекта к целевому без изменения исходного объекта.
Старый
var fruits = [“Orange”, “Apple”, “Guava”] var more = [“Mango”, “Blackberry”] var all = fruits.concat(more) var [last] = all.reverse(); console.log(last) // Orange console.log(all) // Blackberry, Mango, Guava, Apple, Orange
Новый
var fruits = [“Orange”, “Apple”, “Guava”] var more = [“Mango”, “Blackberry”] var all = […fruits,…more] var [last] = [..all].reverse(); console.log(last) // Orange console.log(all) // Blackberry, Mango, Guava, Apple, Orange
В основном он используется для мошенничества, копирования или извлечения некоторых / всех значений без изменения исходного.
Классы
Это синтаксический сахар по сравнению с функциями, используемыми в качестве объекта, реализующего наследование прототипа, но с более легким для понимания синтаксисом классического ООП.
Старый
// works as constructor function Person(name,age) { this.name = name this.age = age } // as method of object Person.prototype.sayHello() { console.log(‘Hello from ‘ + this.name) } var p = new Person(‘Piyush’,20) p.sayHello()
Новый
Class Person { constructor(name,age) { this.name = name this.age = age } sayHello() { console.log(‘Hello from ‘ + this.name) } } var p = new Person(‘Piyush’,20) p.sayHello();