undefined console.log(x); if (true) { let z = 3; } // Ошибка: `z` не определена console.log(z); let y = 1; // Ошибка: `y` уже объявлена в текущей области видимости let y = 2; 6
=> {}; let identify = x => x; // Объект необходимо заворачивать в () let objectify = value => ({ key: value }); let squares = [1, 2, 3].map(x => x * x); let odds = [1, 2, 3].filter(x => { let isOdd = x % 2 === 0; return isOdd; }); Arrow функции => 17
контекст: таймеры, обработчики событий • this привязан лексически, невозможно использовать в качестве конструктора • Функции анонимны, нет информации для отладки Arrow функции 18
first = arr[0]; var second = arr[1]; var third = arr[2]; ES6 let arr = [1, 2, 3]; let [first, second, third] = arr; // Перестановка без дополнительной переменной [second, first] = [first, second]; Массивы 44
5]; var head = nums[0]; var tail = nums.slice(1); var fourth = nums[3]; ES6 let nums = [1, 2, 3, 4, 5]; let [head, ...tail] = nums; // Можно игнорировать элементы let [,,, fourth] = nums; Массивы 45
{ second: 'second' }, 'third' ] }; var second = deep.arr[1].second; var third = deep.arr[2]; ES6 let deep = { arr: [ 'first', { second: 'second' }, 'third' ] }; let { arr: [, { second }, third] } = deep; Объекты 48
Импорт по умолчанию вместе с именованным import random_int, { isOdd as is_odd } from 'math'; log(random_int(1, 5)); assert(is_odd(2), '2 это четное число!'); app.js import { default as random_int } from 'math'; Именованный импорт и экспорт 59
assert(msg) { console.assert(expr, message); } main.js import * as logger from 'logger'; logger.log('Hello, World!'); logger.assert(true === false, 'True это не false!') Импорт в качестве объекта 60
Объекты-контейнеры — Ember.js, Knockout.js let event = Ember.Object.create({ name: 'WSD', desc: 'awesome' }); event.get('name'); event.set('desc', 'super awesome'); Object.observe • Позволяет асинхронно наблюдать за изменениями объектов • Без дополнительных танцев с бубном 66
let interest = ['add', 'update', 'delete']; // Начать наблюдение Object.observe(obj, (changes) => { // Использовать изменения }, interest); Применение 68
• Параллельный JavaScript • Типизированные объекты (Typed objects) • Улучшения событийного цикла • и многое другое ... Можно искать по запросу es7 strawman И следить на esdiscuss.org 72
• Очень быстро можно начать использовать, подключив на страницу • Есть плагины для Grunt, Gulp, Brocolli, Browserify Минусы: • Производит нечитаемый код, но есть поддежка source maps • Нуждается в рантайме для использования сгенерированного кода 82
• Не нуждается в рантайме • Есть плагины для Grunt, Gulp, Brocolli, Browserify Минусы: • Нельзя использовать на лету, подразумевает шаг препроцессинга • Нет встроенных полифилов, их нужно подключать самостоятельно 83
посмотреть на все опции компилятора онлайн • Нельзя сохранять ES6 Fiddle • Простой • Есть небольшие примеры кода • Можно сохранять, а также встраивать 97
кода на ES5/ES3 (сразу) • Код, для которого критична производительность • Код, для которого критичен размер Где можно и нужно: • Изолированные модули • Прототипы! • Собственные библиотеки 106