ECMAScript 2015
Variables & Constantes
Avant
'use strict'
var language = 'JavaScript'
console.log(language)
// JavaScript
if (true) {
var language = 'Go'
console.log(language)
// Go
}
console.log(language)
// GoAprès
'use strict'
let language = 'JavaScript'
console.log(language)
// JavaScript
if (true) {
let language = 'Go'
console.log(language)
// Go
}
console.log(language)
// JavaScriptAvant
'use strict'
var language = 'JavaScript'
language = 'Go'Après
'use strict'
const language = 'JavaScript'
language = 'Go'
// TypeError: invalid assignment to const `language'Avant
'use strict'
for (var index = 0; index < 10; index++) {
//...
}
console.log(index)
// 10Après
'use strict'
for (let index = 0; index < 10; index++) {
//...
}
console.log(index)
// ReferenceError: index is not definedAvant
'use strict'
(function() {
var $ = function() {
// Le vrai jQuery ici...
}
})()
(function() {
var $ = function() {
// Mon amélioration de jQuery moins nul ici...
}
})()Après
'use strict'
{
const $ = function() {
// Le vrai jQuery ici...
}
}
{
const $ = function() {
// Mon amélioration de jQuery moins nul ici...
}
}Fonctions flêchées
Avant
'use strict'
function hello(name) {
return 'Hello, ' + name
}
console.log(hello('you'))
// Hello, youAprès
'use strict'
const hello = (name) => {
return 'Hello, ' + name
}
console.log(hello('you'))
// Hello, youAprès
'use strict'
const hello = name => {
return 'Hello, ' + name
}
console.log(hello('you'))
// Hello, youAprès
'use strict'
const hello = name => 'Hello, ' + name
console.log(hello('you'))
// Hello, youAvant
'use strict'
class Person {
constructor(name) { this.name = name; }
describeLater() {
setTimeout(function() {
console.log(`Hello, ${this.name}.`) // this.name === window.name
}, 1000)
}
}
const person = new Person('Amin')
person.describeLater() // Hello, undefinedAprès
'use strict'
class Person {
constructor(name) { this.name = name; }
describeLater() {
setTimeout(() => {
console.log(`Hello, ${this.name}.`) // this.name === person.name
}, 1000)
}
}
const person = new Person('Amin')
person.describeLater() // Hello, undefinedParamètres par défaut
Avant
'use strict'
function sum(first, second, third) {
if (first === undefined) {
first = 0
}
if (second === undefined) {
second = 0
}
if (third === undefined) {
third = 0
}
return first + second + third
}
console.log(sum())
// 0Après
'use strict'
function sum(first = 0, second = 0, third = 0) {
return first + second + third
}
console.log(sum())
// 0Expansion de tableau
Avant
'use strict'
const languages = [
'javascript',
'go',
'awk'
]
console.log(languages[0], languages[1], languages[2])
// javascript go awkAprès
'use strict'
const languages = [
'javascript',
'go',
'awk'
]
console.log(...languages)
// javascript go awkAvant
'use strict'
function sum() {
let sum = 0
for (const number of arguments) {
sum += number
}
return sum
}
console.log(sum(1, 2)) // 3
console.log(sum(1, 2, 3)) // 6
console.log(sum(1, 2, 3, 4)) // 10
// ...Après
'use strict'
function sum(...numbers) {
let sum = 0
for (const number of numbers) {
sum += number
}
return sum
}
console.log(sum(1, 2)) // 3
console.log(sum(1, 2, 3)) // 6
console.log(sum(1, 2, 3, 4)) // 10
// ...Avant
'use strict'
const q1 = ['January', 'February', 'March']
const q2 = ['April', 'May', 'June']
const q3 = ['July', 'August', 'September']
const all = q1.concat(q2).concat(q3)
console.log(all)
/*
[ 'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September' ]
*/Après
'use strict'
const q1 = ['January', 'February', 'March']
const q2 = ['April', 'May', 'June']
const q3 = ['July', 'August', 'September']
const all = [...q1, ...q2, ...q3]
console.log(all)
/*
[ 'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September' ]
*/Chaînes de caractères
Avant
'use strict'
const a = 1
const b = 2
const c = 3
console.log(a + ' + ' + b + ' + ' + c + ' = ' + (a + b + c))
// 1 + 2 + 3 = 6Après
'use strict'
const a = 1
const b = 2
const c = 3
console.log(`${a} + ${b} + ${c} = ${a + b + c}`)
// 1 + 2 + 3 = 6Avant
'use strict'
console.log(Array(4).join('cool'))
// coolcoolcoolAprès
'use strict'
console.log('cool'.repeat(3))
// coolcoolcoolAvant
'use strict'
var string = 'Hello, everyone!'
var startsWithHello = string.indexOf('Hello') === 0
console.log(startsWithHello) // trueAprès
'use strict'
const string = 'Hello, everyone!'
const startsWithHello = string.startsWith('Hello')
console.log(startsWithHello) // trueAvant
'use strict'
var string = 'It is wednesday, my dudes'
var search = 'dudes'
var endsWithDudes = string.indexOf(search) === (string.length - search.length)
console.log(endsWithDudes) // trueAprès
'use strict'
const string = 'It is wednesday, my dudes'
const endsWithDudes = string.endsWith('dudes')
console.log(endsWithDudes) // trueNombre à base N
Avant
'use strict'
const binary = parseInt('1111', 2)
const hexadecimal = parseInt('deadbeef', 16)
const octal = parseInt('0765', 8)
console.log(binary) // 15
console.log(hexadecimal) // 3735928559
console.log(octal) // 501Après
'use strict'
const binary = 0b1111
const hexadecimal = 0xdeadbeef
const octal = 0o0765
console.log(binary) // 15
console.log(hexadecimal) // 3735928559
console.log(octal) // 501Raccourci d'objet
Avant
'use strict'
const lastname = 'NAIRI'
const firstname = 'Amin'
const age = 25
const person = {
lastname: lastname,
firstname: firstname,
age: age
}
console.log(person)
// { lastname: 'NAIRI', firstname: 'Amin', age: 25 }Après
'use strict'
const lastname = 'NAIRI'
const firstname = 'Amin'
const age = 25
const person = {
lastname,
firstname,
age
}
console.log(person)
// { lastname: 'NAIRI', firstname: 'Amin', age: 25 }Méthodes d'objet raccourci
Avant
'use strict'
const motorcycle = {
brand: 'Triumph',
model: 'Street Triple S 660 A2',
toString: function() {
return `${this.brand} - ${this.model}`
}
}
console.log(`My motorcycle is a ${motorcycle}`)
// My motorcycle is a Triumph - Street Triple S 660 A2Après
'use strict'
const motorcycle = {
brand: 'Triumph',
model: 'Street Triple S 660 A2',
toString() {
return `${this.brand} - ${this.model}`
}
}
console.log(`My motorcycle is a ${motorcycle}`)
// My motorcycle is a Triumph - Street Triple S 660 A2Déconstruction de tableau
Avant
'use strict'
const brands = [
'Apple',
'Microsoft',
'Google'
]
const first = brands[0]
const second = brands[1]
const third = brands[2]
console.log(first, second, third)
// Apple Microsoft GoogleAprès
'use strict'
const brands = [
'Apple',
'Microsoft',
'Google'
]
const [ first, second, third ] = brands
console.log(first, second, third)
// Apple Microsoft GoogleAvant
'use strict'
function swap(target, a, b) {
const temp = target[a]
target[a] = target[b]
target[b] = temp
}
const numbers = [ 1, 2 ]
console.log(...numbers)
// 1 2
swap(numbers, 0, 1)
console.log(...numbers)
// 2 1Après
'use strict'
function swap(target, a, b) {
[ target[a], target[b] ] = [ target[b], target[a] ]
}
const numbers = [ 1, 2 ]
console.log(...numbers)
// 1 2
swap(numbers, 0, 1)
console.log(...numbers)
// 2 1Avant
'use strict'
const person = [
'NAIRI',
'Amin'
]
function describe(person) {
const lastname = person[0]
const firstname = person[1]
return `${lastname} --- ${firstname}`
}
describe(person)
// 'NAIRI --- Amin'Après
'use strict'
const person = [
'NAIRI',
'Amin'
]
function describe([ lastname, firstname ]) {
return `${lastname} --- ${firstname}`
}
describe(person)
// 'NAIRI --- Amin'Avant
'use strict'
const numbers = [ 0, 1, 2, 3, 4, 5 ]
const first = numbers[0]
const second = numbers[1]
const third = numbers[2]
const others = [ numbers[3], numbers[4], numbers[5] ]
console.log(first) // 0
console.log(second) // 1
console.log(third) // 2
console.log(others) // [ 3, 4, 5 ]Après
'use strict'
const numbers = [ 0, 1, 2, 3, 4, 5 ]
const [ first, second, third, ...others ] = numbers
console.log(first) // 0
console.log(second) // 1
console.log(third) // 2
console.log(others) // [ 3, 4, 5 ]Déconstruction d'objet
Avant
'use strict'
const innerWidth = window.innerWidth
const innerHeight = window.innerHeight
console.log(innerWidth) // 800
console.log(innerHeight) // 600Après
'use strict'
const { innerWidth, innerHeight } = window
console.log(innerWidth) // 800
console.log(innerHeight) // 600Avant
'use strict'
const vm = {
vcpus: 16,
vram: 32,
os: 'NetBSD'
}
function describe(vm) {
const vcpus = vm.vcpus
const vram = vm.vram
const os = vm.os
return `New virtual machine detected: ${os} (${vram} Go vRAM, ${vcpus} vCPUs)`
}
console.log(describe(vm))
// New virtual machine detected: NetBSD (32 Go vRAM, 16 vCPUs)Après
'use strict'
const vm = {
vcpus: 16,
vram: 32,
os: 'NetBSD'
}
function describe({ vcpus, vram, os }) {
return `New virtual machine detected: ${os} (${vram} Go vRAM, ${vcpus} vCPUs)`
}
console.log(describe(vm))
// New virtual machine detected: NetBSD (32 Go vRAM, 16 vCPUs)Avant
'use strict'
const motorcycle = {
brand: 'Triumph',
model: 'Street Triple RS',
cylinders: 765,
compressionRate: '12,65:1',
gears: 6
}
const brand = motorcycle.brand
const model = motorcycle.model
const others = {
cylinders: motorcycle.cylinders,
compressionRate: motorcycle.compressionRate,
gears: motorcycle.gears
}
console.log(brand) // Triumph
console.log(model) // Street Triple RS
console.log(others) // { cylinders: 765, compressionRate: '12,65:1', gears: 6 }Après
'use strict'
const motorcycle = {
brand: 'Triumph',
model: 'Street Triple RS',
cylinders: 765,
compressionRate: '12,65:1',
gears: 6
}
const { brand, model, ...others } = motorcycle
console.log(brand) // Triumph
console.log(model) // Street Triple RS
console.log(others) // { cylinders: 765, compressionRate: '12,65:1', gears: 6 }Avant
'use strict'
const motorcycle = {
brand: 'Triumph',
model: 'Street Triple RS',
price: 11900
}
const marque = motorcycle.brand
const modèle = motorcycle.model
const prix = motorcycle.price
console.log(`La ${marque} ${modèle} est à ${prix} €.`)
// La Triumph Street Triple RS est à 11900 €.Après
'use strict'
const motorcycle = {
brand: 'Triumph',
model: 'Street Triple RS',
price: 11900
}
const { brand: marque, model, modèle, price: prix } = motorcycle
console.log(`La ${marque} ${modèle} est à ${prix} €.`)
// La Triumph Street Triple RS est à 11900 €.Boucles
Avant
'use strict'
const oses = [
'windows',
'osx',
'linux'
]
for (var index = 0; index < oses.length; index++) {
console.log(`${oses[index]} is supported on our plateform`)
}
// windows is supported on our plateform
// osx is supported on our plateform
// linux is supported on our plateformAprès
'use strict'
const oses = [
'windows',
'osx',
'linux'
]
for (os of oses) {
console.log(`${os} is supported on our plateform`)
}
// windows is supported on our plateform
// osx is supported on our plateform
// linux is supported on our plateformAvant
'use strict'
var bits = {
next: (function() {
var bit = 1
return function() {
var current = bit
bit *= 2
return current
}
})()
}
for (var bit = bits.next(); bit < 10; bit = bits.next()) {
console.log(bit) // 1 2 4 8
}Après
'use strict'
const bits = {
*[Symbol.iterator]() {
let bit = 1
while (true) {
yield bit
bit *= 2
}
}
}
for (const bit of bits) {
if (bit > 10) break
console.log(bit) // 1 2 4 8
}Générateurs
Avant
'use strict'
function range(start, stop) {
numbers = []
for (var number = start; number < stop; number++) {
numbers.push(number)
}
return numbers
}
var numbers = range(0, 5)
var length = numbers.length
for (var index = 0; index < length; index++) {
console.log(numbers[index]) // 0 1 2 3 4
}Après
'use strict'
function *range(start, stop) {
for (let number = start; number < stop; number++) {
yield number
}
}
for (const number of range(0, 5)) {
console.log(number) // 0 1 2 3 4
}Avant
'use strict'
function users(callback, limit) {
for (var index = 1; index <= limit; index++) {
var request = new XMLHttpRequest()
request.open('GET', 'https://jsonplaceholder.typicode.com/users/' + index)
request.send()
request.onload = function() {
var user = JSON.parse(this.responseText)
callback(user)
}
}
}
users(function(user) {
console.log(user)
}, 10)Après
'use strict'
async function *users() {
let index = 1
for (;;) {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${index++}`)
if (!response.ok) break
const user = await response.json()
yield user
}
}
async function main() {
for await (const user of users()) {
console.log(user)
}
}
main()Avant

Transformer une classe en tableau automatiquement
Après
'use strict'
class Garage {
constructor(vehicles) {
this.vehicles = vehicles
}
* [Symbol.iterator]() {
for (const vehicle of this.vehicles) {
yield vehicle
}
}
}
const myGarage = new Garage([
'Triumph Street Triple S 660 A2',
'Mazda 2',
'Nissan X-Trail'
])
const myVehicles = [...myGarage]
console.log(myVehicles)
// [ 'Triumph Street Triple S 660 A2', 'Mazda 2', 'Nissan X-Trail' ]Set
Avant
'use strict'
var languages = [ 'JavaScript', 'Go', 'C', 'C', 'C++', 'C' ]
var length = languages.length
var uniques = []
for (var index = 0; index < length; index++) {
var currentLanguage = languages[index]
if (uniques.indexOf(currentLanguage) === -1) {
uniques.push(currentLanguage)
}
}
console.log(uniques) // [ 'JavaScript', 'Go', 'C', 'C++' ]Après
'use strict'
var languages = [ 'JavaScript', 'Go', 'C', 'C', 'C++', 'C' ]
var uniques = [...new Set(languages)]
console.log(uniques) // [ 'JavaScript', 'Go', 'C', 'C++' ]Méthodes de tableau
Avant
'use strict'
var users = [
{ id: 1, email: 'aminnairi@myges.fr' },
{ id: 2, email: 'quentinhermiteau@myges.fr' },
{ id: 3, email: 'jordydumand@myges.fr' }
]
var user = users.filter(function(user) {
return user.id === 2
})[0]
console.log(user) // { id: 2, email: 'quentinhermiteau@myges.fr' }Après
'use strict'
const users = [
{ id: 1, email: 'aminnairi@myges.fr' },
{ id: 2, email: 'quentinhermiteau@myges.fr' },
{ id: 3, email: 'jordydumand@myges.fr' }
]
const user = users.find(({ id }) => id === 2)
console.log(user) // { id: 2, email: 'quentinhermiteau@myges.fr' }Avant

Trouver l'index d'un élément
Après
'use strict'
const users = [
{ id: 1, email: 'aminnairi@myges.fr' },
{ id: 2, email: 'quentinhermiteau@myges.fr' },
{ id: 3, email: 'jordydumand@myges.fr' }
]
const index = users.find(({ email }) => email.includes('quentin'))
users.splice(index, 1)
console.log(users)
// [
// { id: 1, email: 'aminnairi@myges.fr' },
// { id: 3, email: 'jordydumand@myges.fr' }
// ]ECMAScript 2015
By Amin Nairi
ECMAScript 2015
- 109