es6 is so 2015, meet es2016 - nodejs interactive europe
Post on 12-Apr-2017
92 Views
Preview:
TRANSCRIPT
"ECMAScript was always an unwanted trade name that sounds
like a skin disease.
https://mail.mozilla.org/pipermail/es-discuss/2006-October/000133.html
Brendan Eich, creator of JavaScript
The TC39 processStage 0: StrawmanFree-form ideas, reviewed in TC39 meetingsStage 1: ProposalFormally accepted proposalStage 2: DraftHas description of syntax and semanticsStage 3: CandidateSpec text complete, has at least 2 implementationsStage 4: FinishedReady for standard, passes unit tests
x ** yMath.pow(x, y);
let cubed = 3;cubed **= 3;// same as cubed = 3 * 3 * 3
let squared = 2 ** 2;// same as 2 * 2
['a', 'b', 'c'].indexOf('a') >= 0; // true ['a', 'b', 'c'].indexOf('d') >= 0; // false
['a', 'b', 'c'].includes('a'); // true['a', 'b', 'c'].includes('d'); // false
['a', 'b', NaN].indexOf(NaN) >= 0; // false [‘a', 'b', NaN].includes(NaN); // true
[ , , ].indexOf(undefined) >= 0; // false [ , , ].includes(undefined); // true
Stage 4: FinishedReady for standard, passes unit tests
• Object.values/Object.entries • String padding • Object.getOwnPropertyDescriptors() • Async functions • Trailing commas in function parameter
lists and calls
https://github.com/tc39/proposals/blob/master/finished-proposals.md
const obj = { name: 'Paul', age: 30 };
let keys = Object.keys(obj);// ['name', 'age']
let values = Object.values(obj);// ['Paul', 30]
let entries = Object.entries(obj);// [['name', 'Paul'], ['age', 30]]
for (let [key,value] of Object.entries(obj)) { console.log(`${key}: ${value}`);}
// 'name': 'Paul'// 'age': 30
'1'.padStart(3, '0');// '001''1'.padEnd(3, '0');// '100'
'Node'.padEnd(9, 'JS');// 'NodeJSJSJ'
'foo'.padStart(8);// ' foo'
const obj = { [Symbol('foo')]: 123, get bar() { return 'abc' },}; console.log(Object.getOwnPropertyDescriptors(obj));// Output:// { [Symbol('foo')]:// { value: 123,// writable: true,// enumerable: true,// configurable: true },// bar:// { get: [Function: bar],// set: undefined,// enumerable: true,// configurable: true } }
var o1 = { a: 1 };var o2 = { b: 2 };Object.assign(o1, o2);console.log(o1); // { a: 1, b: 2 }
Copying properties into an object
Copying properties into an objectconst source = { set foo(value) { console.log(value); }}; console.log(Object.getOwnPropertyDescriptor(source, 'foo'));// { get: undefined,// set: [Function: foo],// enumerable: true,// configurable: true }
const target = {};Object.assign(target, source);console.log(Object.getOwnPropertyDescriptor(target, 'foo'));// { value: undefined,// writable: true,// enumerable: true,// configurable: true }
Copying properties into an objectconst source = { set foo(value) { console.log(value); }};
const target = {};Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));console.log(Object.getOwnPropertyDescriptor(target, 'foo'));// { get: undefined,// set: [Function: foo],// enumerable: true,// configurable: true }
Cloning objects
const clone = Object.create( Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj) );
function doSomethingAsync(callback) { setTimeout(function () { if (typeof callback === 'function') { callback('something'); } }, 1000)}
function doSomethingAsync(callback) { setTimeout(function () { if (typeof callback === 'function') { callback('something'); } }, 1000)} function doWork() { console.log('start'); doSomethingAsync(function (value) { console.log(value) });} doWork();console.log('working');// 'start'// 'working'// 'something'
function doSomethingAsync() { return new Promise(function (resolve, reject) { setTimeout(function () { resolve('something'); }, 1000) });} function doWork() { console.log('start'); doSomethingAsync().then(function (value) { console.log(value) });} doWork();console.log('working');// 'start'// 'working'// 'something'
function doSomethingAsync() { return new Promise(function (resolve, reject) { setTimeout(function () { resolve('something'); }, 1000) });} async function doWork() { console.log('start'); let value = await doSomethingAsync(); console.log(value);} doWork();console.log('working');// 'start'// 'working'// 'something'
function doSomethingAsync() { return new Promise(function (resolve, reject) { setTimeout(function () { resolve('something'); }, 1000) });} async function doWork() { console.log('start'); let value = await doSomethingAsync(); console.log(value); value += await doSomethingAsync(); console.log(value);} doWork();console.log('working');// 'start'// 'working'// 'something'// 'somethingsomething'
function doSomethingAsync() { return new Promise(function (resolve, reject) { setTimeout(function () { reject('you failed! hah!'); }, 1000) });} async function doWork() { console.log('start'); let value; try { value = await doSomethingAsync(); } catch (e) { value = 'error: ' + e.message; } console.log(value);} doWork();console.log('working');// 'start'// 'working'// 'you failed! hah!'
https://ponyfoo.com/articles/understanding-javascript-async-
await
let obj = { first: 'Jane', last: 'Doe',};
let arr = [ 'red', 'green', 'blue',]; console.log(arr.length); // 3
In objects and arrays
Stage 3: CandidateSpec text complete, has at least 2 implementations
• SIMD.JS - SIMD APIs + polyfill • Function.prototype.toString
revision • Lifting Template Literal Restriction
Status: https://github.com/tc39/ecma262 Specs: https://tc39.github.io/ecma262/
top related