Skip to content

oliv37/es6-dojo-tri

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Installation

Exécutez un simple npm install

Exécution

Exécutez un npm test

Ouvrez 2 onglets :

Documentation

Modules (1-import.js / 2-export.js)

File1.js

export function test() {
  console.log('test');
}

function privateFunc() {
  console.log('private');
}

export var a = 3;

export default function() {
  console.log('export default from File1');
}


File2.js

import { test as myTest, a } from 'File1.js';
import func from 'File1.js';
// import { privateFunc } from 'File1.js' -> erreur la fonction n'a pas été exportée

// test() -> error: test is not defined
myTest(); // affiche 'test'
console.log(a); // affiche 3
func(); // affiche 'export default from File1'

Const / Let (3-const-let.js)

if (true) {
  const a = 3;
  console.log(a); // 3
  // on ne peut pas écrire : a = 4; 
}

console.log(window.a); // undefined

for(let i of [1, 2, 3, 4]) {
	...
}
console.log(i); // Reference error : i is not defined

Destructuring (4-destructuring.js)

Tableau

const arr = [3, 10, 5];
const [a, ,b] = arr;

console.log(a); // 3
console.log(b); // 5


Valeur par défaut

const arr = [3, 10, 7];
const [a, ,b = 5] = arr;
const [c, d = 6] = [11];

console.log(a); // 3
console.log(b); // 7
console.log(c); // 11
console.log(d); // 6


Référence une autre variable

const arr = [3, 10, 5];
const [a, ,c = a, d = a] = arr;

console.log(a); // 3
console.log(c); // 5
console.log(d); // 3


Avec des objets

const obj = {
  firstName: 'john',
  age: 10
};

const { firstName } = obj;

console.log(firstName); // john
const obj= {
  firstName: 'john',
  age: 10
};

const { firstName: s } = obj;


console.log(s); // john
console.log(firstName); // not defined
const obj= {
  firstName: 'john',
  age: 10
};

function printName({ firstName }) {
  console.log(firstName);
}
printName(obj); // john
function printName({ name, age = 5 }) {
  console.log(name + ' ' + age);
}
printName({ name: 'john' }); // john 5

Spread (5-spread-rest.js)

...[1, 2, 3] permet de transformer [1, 2, 3] en 1, 2, 3

const arr = [1, 2, 3];

function func(a, b, c) {
  return a + b + c;
}

console.log(func(...arr)); // 6
// func(...[1, 2, 3]) équivaut à func(1, 2, 3)


Concaténation de tableaux

const arr1 = [1, 2];
const arr2 = [4, 5];

const arr3 = [...arr1, 3, ...arr2];
console.log(arr3); // [1, 2, 3, 4, 5]

Rest

function func(...args) {
  return args;
}
  
func(1, 2, 3, 4); // [1, 2, 3, 4];
function func(a, ...args) {
  console.log(a); // 1
  console.log(args); // [2, 3, 4]
}
  
func(1, 2, 3, 4);

Destructuring and Rest

const [a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]

This (6-this.js)

  • En ES5, dans le contexte global (et dans un navigateur)
this === window // true
this === undefined // true (in strict mode)
  • En tant que méthode d'un objet, this fait référence à l'objet qui est propriétaire de la méthode.
var obj = {
  a: 2,
  func: function() {
    return this.a;
  }
};

obj.func() === 2; // true

La valeur de `this' dépend du contexte d'exécution de la fonction

var obj = {
  a: 2,
  func: function() {
    return this.a;
  }
};

const fn = obj.func;
fn(); // error Cannot read property 'a' of undefined (en ES6, car this est undefined)

Arrow function (7-arrow.js)

Une seule instruction (pas besoin du mot-clé return) :

const func = () => "foo";
func(); // retourne "foo"

Sur plusieurs lignes avec des crochets :

const func2 = (param) => {
  const foo = `foo`;
  return foo + param;
};

En tant que paramètre d'une fonction (avec un seul argument, pas besoin de parenthèses).

const arr = [1,2,3].map(i => i * 2);
console.log(arr); // [2, 4, 6]

Les arrow functions ne définissent pas la notion de this, ainsi dans une arrow function la valeur de this est la même que dans son contexte englobant.

const a = {
  c: 5,
  fn: () => this
};

console.log(a.fn()); // undefined
const a = {
  c: 5,
  fn: function() {
    return this;
  },
  fn2() { return this; }
};

console.log(a.fn() === a); // true
console.log(a.fn2() === a); // true

Seul le mot-clé function peut définir un nouveau contexte d'exécution.

Pour déterminer la valeur de this, il faut regarder dans quel contexte la fonction a été appelée.

Attention à l'utilisation de this dans les arrow functions

Classes (8-class.js)

class Employee {
  constructor(name, firstName) {
    this.name= name;
    this.firstName= firstName;
  }

  get fullName() {
    return this.firstName + ' ' + this.name
  }

  printName() {
    console.log(this.name);
  }

  static fn() {
    console.log('static function');
  }
}

const e = new Employee ('smith', 'john');
console.log(e.name); // smith
console.log(e.fullName); // john smith
e.printName(); // smith
Employee.fn(); // static function

écriture des getters/setters avec get et set

Autres (9-class.js)

  • Template string
const name = 'JOHN';
console.log(`his name is ${toto.toLowerCase()}`);
// his name is john

Sur plusieurs lignes

const name = 'JOHN';
const content = `
	<div>
		<p>${name}</p>
	</div>
`;
jQuery('#id').html(content);
/*
<div>
   <p>JOHN</p>
</div>
*/
  • Paramètres par défaut
function fn(a = 0, b = 1) {
  return a + b;
}

fn(3, 4); // 7
fn(3); // 4
fn(); // 1

// l'équivalent avec arrow function
const fn = (a = 0, b = 1) => a + b;
function fn(str, nb = str.length) {
  return str + '!'.repeat(nb);
}

fn('test', 6); // test!!!!!!
fn('test'); // test!!!!

// l'équivalent avec arrow function
const fn = (str, nb = str.length) => str + '!'.repeat(nb);
  • Filter / Map / Reduce
const result = [1, 2, 3]
    .filter(a => a > 1)
    .map(a => a + 1)
    .reduce((acc, curr) => acc + curr, 0);

console.log(result); // 7
  • Object.assign
var obj = {
    a: 2,
    b: 3,
    c: {
	  d: 6
	}
};

var obj2 = Object.assign({}, obj);

obj2.b = 4;
console.log(obj.b); // 3
console.log(obj2.b); // 4

obj2.c.d = 7;

console.log(obj.c.d); // 7
console.log(obj2.c.d); // 7
// Attention pour les propriétés qui correspondent 
// à un objet, c'est la référence qui est copiée
  • Set
let s = new Set()
s.add("hello").add("goodbye").add("hello");
console.log(s.size === 2);
console.log(s.has("hello") === true);

// garde l'ordre d'insertion
for (let key of s.values()) console.log(key);
  • Map
var maMap = new Map();

var objetClé = {},
    fonctionClé = function () {},
    chaineClé = "une chaîne";

// définir les valeurs
maMap.set(chaineClé, "valeur associée à 'une chaîne'");
maMap.set(objetClé, "valeur associée à objetClé");
maMap.set(fonctionClé, "valeur associée à fonctionClé");

maMap.size; // 3

// récupérer les valeurs
maMap.get(chaineClé);    // "valeur associée à 'une chaîne'"
maMap.get(objetClé);     // "valeur associée à objetClé"
maMap.get(fonctionClé);  // "valeur associée à fonctionClé"

Liens

http://mikelambert.me/es6

http://es6-features.org

https://kangax.github.io/compat-table/es6/

https://jsfiddle.net/667vt5y7/34/

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors