OLD | NEW |
---|---|
(Empty) | |
1 <!-- This is feature markdown template | |
2 ## Header | |
3 | |
4 **Usage Example:** | |
5 | |
6 ``` js | |
7 | |
8 ``` | |
9 | |
10 **Documentation:** [link]() | |
11 | |
12 **Discussion Notes / Link to Thread:** | |
13 | |
14 hyphen-hyphen-hyphen (change to actual hyphen) | |
15 | |
16 --> | |
17 | |
18 | |
19 <style type="text/css"> | |
20 .doc { | |
21 font-size: 16px; | |
22 } | |
23 | |
24 .doc h2[id] { | |
25 line-height: 20px; | |
26 font-size: 16px; | |
27 } | |
28 | |
29 .doc h2 > code { | |
30 font-size: 16px; | |
31 font-weight: bold; | |
32 } | |
33 | |
34 .feature-container { | |
35 background-color: #e8eef7; | |
36 border: 1px solid #c3d9ff; | |
37 margin-bottom: 5px; | |
38 border-radius: 5px; | |
39 } | |
40 | |
41 .feature-container > h2 { | |
42 cursor: pointer; | |
43 background-color: #c3d9ff; | |
44 margin: 0; | |
45 padding: 5px; | |
46 border-radius: 5px; | |
47 } | |
48 | |
49 .feature-container > *:not(h2){ | |
50 display: none; | |
51 padding: 0px 10px; | |
52 } | |
53 | |
54 .feature-container.open > *:not(h2){ | |
55 display: block; | |
56 } | |
57 </style> | |
58 | |
59 <script> | |
60 document.addEventListener("DOMContentLoaded", function(event) { | |
Dan Beam
2016/11/30 23:08:54
prefer single quotes always
Dan Beam
2016/12/07 19:41:40
Done.
| |
61 // Move all headers and corresponding contents to an accordion container. | |
62 document.querySelectorAll('h2[id]').forEach(function(header){ | |
Dan Beam
2016/11/30 23:08:53
document.querySelectorAll('h2[id]').forEach(functi
Dan Beam
2016/12/07 19:41:39
Done.
| |
63 var container = document.createElement('div'); | |
64 container.classList.add('feature-container'); | |
65 header.parentNode.insertBefore(container, header); | |
66 | |
67 // Add all the following siblings until it hits an <hr> | |
68 var ele = header; | |
Dan Beam
2016/11/30 23:08:53
ele -> el everywhere
Dan Beam
2016/12/07 19:41:39
Done.
| |
69 while(ele && ele.tagName !== 'HR') { | |
Dan Beam
2016/11/30 23:08:53
while(ele
^^
space here
Dan Beam
2016/12/07 19:41:39
Done.
| |
70 var nextEle = ele.nextElementSibling; | |
71 container.append(ele); | |
72 ele = nextEle; | |
73 } | |
74 | |
75 // Add handler to open accordion on click. | |
76 header.addEventListener('click', () => { | |
Dan Beam
2016/11/30 23:08:53
you should arguably wait until we support => befor
Dan Beam
2016/12/07 19:41:40
Done.
| |
77 header.parentNode.classList.toggle('open'); | |
78 }); | |
79 }); | |
80 | |
81 // Then remove all <hr>s since everything's accordionized. | |
82 document.querySelectorAll('hr').forEach(function(ele){ | |
83 ele.parentNode.removeChild(ele); | |
84 }); | |
85 }); | |
86 </script> | |
87 | |
88 [TOC] | |
89 | |
90 # ES6 Support In Chromium | |
91 | |
92 This is a list of new/updated features in ES6 specs that is being considered to | |
93 be supported for Chromium development. | |
94 | |
95 >**TBD:** Do we want to differenciate allow/ban status between subprojects? If | |
96 so, how to denote? | |
97 | |
98 >**TBD:** Cross platform-build support? | |
99 | |
100 You can propose changing the status of a feature by sending an email to | |
101 chromium-dev@chromium.org. Include a short blurb on what the feature is and why | |
102 you think it should or should not be allowed, along with links to any relevant | |
103 previous discussion. If the list arrives at some consensus, send a codereview | |
104 to change this file accordingly, linking to your discussion thread. | |
105 | |
106 >Some descriptions and Usage examples are from [kangax](https://kangax.github. | |
107 io/compat-table/es6/) and [http://es6-features.org/](http://es6-features.org/) | |
108 | |
109 # Allowed Features | |
110 | |
111 The following features are allowed in Chromium development. | |
112 | |
113 ## `Promise` | |
114 | |
115 Built-in representation of a value that might be determined asynchronously, | |
116 relieving developers from "callback hell". | |
Dan Beam
2016/11/30 23:08:53
can we steal more from https://developer.mozilla.o
Dan Beam
2016/12/07 19:41:40
Done.
| |
117 | |
118 **Usage Example:** | |
119 | |
120 ``` js | |
121 function promiseA() { | |
122 return new Promise((resolve, reject) => setTimeout(resolve, 100)); | |
123 } | |
124 | |
125 function promiseB() { | |
126 return new Promise((resolve, reject) => setTimeout(resolve, 200)); | |
127 } | |
128 | |
129 function promiseC() { | |
130 return new Promise((resolve, reject) => setTimeout(resolve, 300)); | |
131 } | |
132 | |
133 Promise.all([promiseA(), promiseB(), promiseC()]).then(([a, b, c]) => { | |
134 someFunction(a, b, c); | |
135 }); | |
Dan Beam
2016/11/30 23:08:54
can you use less ES6 features in this example?
ho
Dan Beam
2016/12/07 19:41:39
Done.
| |
136 ``` | |
137 | |
138 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
139 /#sec-promise-objects) | |
140 | |
141 **Discussion Notes:** Feature already extensively used prior to creation of | |
142 this document. | |
143 | |
144 --- | |
145 | |
146 # Banned Features | |
147 | |
148 The following features are banned for Chromium development. | |
149 | |
150 # Features To Be Discussed | |
151 | |
152 The following features are currently disallowed. See the top of this page on | |
153 how to propose moving a feature from this list into the allowed or banned | |
154 sections. | |
155 | |
156 ## `let` (Block-Scoped Variables) | |
157 | |
158 Declare variable that exists within the block scope. `let` can generally be | |
Dan Beam
2016/11/30 23:08:52
`let` declares a variable within the scope of a bl
Dan Beam
2016/12/07 19:41:39
Done.
| |
159 used to replace `var` but `let` in global scope, unlike `var`, does not | |
160 introduce a property on the global object. | |
161 | |
162 **Usage Example:** | |
163 | |
164 ``` js | |
165 // This will make all buttons output "3". | |
166 for(var i = 0; i < 3; i++) { | |
167 buttons[i].onclick = function() { | |
168 console.log(i); | |
169 }; | |
170 } | |
171 | |
172 // This will make buttons output corresponding "i" values. | |
173 for(let i = 0; i < 3; i++) { | |
174 buttons[i].onclick = function() { | |
175 console.log(i); | |
176 }; | |
177 } | |
178 | |
179 var bar = 1; | |
180 var bar = 1; // No error thrown. | |
181 | |
182 let foo = 1; | |
183 let foo = 1; // TypeError: Identifier 'foo' has already been declared. | |
184 ``` | |
185 | |
186 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
187 /#sec-let-and-const-declarations) | |
188 | |
189 **Discussion Notes / Link to Thread:** | |
190 | |
191 --- | |
192 | |
193 ## `const` (Block-Scoped Constants) | |
194 | |
195 Constants (also known as "immutable variables") are variables which cannot be | |
196 re-assigned new content. Note that if the value is an object, the object itself | |
197 is still mutable. | |
198 | |
199 `const` has traditionally been supported as a "function scoped" declaration | |
200 like `var` (except in Internet Explorer), however in VMs supporting ES6 `const` | |
201 is now a block scope declaration. | |
Dan Beam
2016/11/30 23:08:53
i would drop this an just say "Also note that in C
Dan Beam
2016/12/07 19:41:39
Done.
| |
202 | |
203 **Usage Example:** | |
204 | |
205 ``` js | |
206 const gravity = 9.81; | |
207 gravity = 0; // TypeError: Assignment to constant variable. | |
208 | |
209 gravity === 9.81; // true | |
Dan Beam
2016/11/30 23:08:53
can we put an example of an object?
const frobber
Dan Beam
2016/12/07 19:41:39
Done.
| |
210 ``` | |
211 | |
212 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
213 /#sec-let-and-const-declarations) | |
214 | |
215 **Discussion Notes / Link to Thread:** | |
216 | |
217 --- | |
218 | |
219 ## `=>` (Arrow Functions) | |
220 | |
221 Arrow functions provide a concise syntax to create a function, and fix a number | |
222 of difficulties with this (e.g. eliminating the need to write `const self = | |
223 this`. Particularly useful for nested functions or callbacks. | |
224 | |
225 Prefer arrow functions over the function keyword, over `f.bind(this)`, and | |
226 especially over `goog.bind(f, this)`. | |
Dan Beam
2016/11/30 23:08:53
we don't use closure, so goog.bind() isn't really
Dan Beam
2016/12/07 19:41:39
Done.
| |
227 | |
228 Arrow functions has an implicit return when used without a body block. | |
229 | |
230 **Usage Example:** | |
231 | |
232 ``` js | |
233 // General usage, eliminating need for .bind(this). | |
234 setTimeout(() => { | |
235 this.doSomething(); | |
236 }, 1000); // no need for .bind(this) or const self = this. | |
237 | |
238 // Another example... | |
239 window.addEventListener('scroll', (event) => { | |
240 this.doSomething(event); | |
241 }); // no need for .bind(this) or const self = this. | |
242 | |
243 // Implicit return: returns the value if expression not inside a body block. | |
244 () => 1 // returns 1 | |
245 () => {1} // returns undefined - body block does not implicitly return. | |
246 () => {return 1;} // returns 1 | |
Dan Beam
2016/11/30 23:08:52
nit: two spaces before the comment starts (right n
Dan Beam
2016/12/07 19:41:39
Done.
| |
247 ``` | |
248 | |
249 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
250 /#sec-arrow-function-definitions) | |
251 | |
252 **Discussion Notes / Link to Thread:** | |
253 | |
254 --- | |
255 | |
256 ## Classes | |
257 | |
258 OOP-style and boilerplate-free class syntax, including inheritance, super(), | |
259 static members, and getters and setters. | |
260 | |
261 **Usage Example:** | |
262 | |
263 ``` js | |
Dan Beam
2016/11/30 23:08:52
class Shape {
constructor(id, x, y) {
this.x
Dan Beam
2016/12/07 19:41:39
Done.
| |
264 class Rectangle extends Shape { | |
dpapad
2016/11/23 01:39:38
Can you also include the definition of the Shape c
Dan Beam
2016/12/07 19:41:39
Done.
| |
265 constructor(id, x, y, width, height) { | |
266 super(id, x, y); | |
267 this.width = width; | |
268 this.height = height; | |
269 } | |
270 static defaultRectangle() { | |
Dan Beam
2016/11/30 23:08:53
more nerd points for
static goldenRectangle() {
Dan Beam
2016/12/07 19:41:39
Done.
| |
271 return new Rectangle('default', 0, 0, 100, 100); | |
272 } | |
273 move(x, y) { | |
274 this.x = x; | |
275 this.y = y; | |
276 } | |
277 }; | |
Dan Beam
2016/11/30 23:08:53
can you drop the ; from this? it's only kinda des
Dan Beam
2016/12/07 19:41:39
Done.
| |
278 ``` | |
279 | |
280 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
281 /#sec-class-definitions) | |
282 | |
283 **Discussion Notes / Link to Thread:** | |
284 | |
285 --- | |
286 | |
287 ## Block Scope Functions | |
288 | |
289 **Usage Example:** | |
290 | |
291 ``` js | |
292 { | |
293 function foo() { | |
294 return 1; | |
295 } | |
296 // foo() === 1 | |
297 { | |
298 function foo() { | |
299 return 2; | |
300 } | |
301 // foo() === 2 | |
302 } | |
303 // foo() === 1 | |
304 } | |
305 ``` | |
306 | |
307 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
308 /#sec-functiondeclarationinstantiation) | |
309 | |
310 **Discussion Notes / Link to Thread:** | |
311 | |
312 --- | |
313 | |
314 ## Default Function Parameters | |
315 | |
316 **Usage Example:** | |
317 | |
318 ``` js | |
319 function f(x, y = 7, z = 42) { | |
Dan Beam
2016/11/30 23:08:54
nit: I think this is a more useful example
/**
*
Dan Beam
2016/12/07 19:41:40
Done.
| |
320 return x + y + z; | |
321 } | |
322 // f(1) === 50; | |
323 ``` | |
324 | |
325 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
326 /#sec-functiondeclarationinstantiation) | |
327 | |
328 **Discussion Notes / Link to Thread:** | |
329 | |
330 --- | |
331 | |
332 ## Rest Parameters | |
333 | |
334 Aggregation of function arguments into one Array variable. | |
335 | |
336 **Usage Example:** | |
337 | |
338 ``` js | |
339 function f(x, y, ...a) { | |
340 // for f(1, 2, 3, 4, 5)... | |
dpapad
2016/11/23 01:39:38
These comments threw me off. It looks like a comme
Dan Beam
2016/11/30 23:08:54
i agree but I think this would be even simpler:
f
| |
341 // x = 1, y = 2 | |
342 // a = [3, 4, 5] | |
343 } | |
344 ``` | |
345 | |
346 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
347 /#sec-function-definitions) | |
348 | |
349 **Discussion Notes / Link to Thread:** | |
350 | |
351 --- | |
352 | |
353 ## Spread Operators | |
354 | |
355 Spreading the elements from an iterable collection into individual literals as | |
356 function parameters. | |
357 | |
358 **Usage Example:** | |
359 | |
360 ``` js | |
361 // Spreading an Array | |
362 var params = [ 'hello', true, 7 ]; | |
363 var other = [ 1, 2, ...params ]; // [ 1, 2, 'hello', true, 7 ] | |
364 f(1, 2, ...params) === 9; | |
dpapad
2016/11/23 01:39:38
After reading this line, I am still not sure how d
Dan Beam
2016/11/30 23:08:53
agreed, can we drop this line until we find a less
Dan Beam
2016/12/07 19:41:39
Done.
| |
365 | |
366 // Spreading a String | |
367 var str = 'foo'; | |
368 var chars = [ ...str ]; // [ 'f', 'o', 'o' ] | |
369 ``` | |
370 | |
371 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
372 /#sec-argument-lists-runtime-semantics-argumentlistevaluation) | |
373 | |
374 **Discussion Notes / Link to Thread:** | |
375 | |
376 --- | |
377 | |
378 ## Object Literal Extensions | |
379 | |
380 Convenient new ways for object property definition. | |
381 | |
382 **Usage Example:** | |
383 | |
384 ``` js | |
385 // Computed property name | |
386 var x = 'key'; | |
387 var obj = {[x]: 1}; | |
Dan Beam
2016/11/30 23:08:53
var prop = 'foo';
var o = {
[prop]: 'hey',
['b
Dan Beam
2016/12/07 19:41:39
Done.
| |
388 | |
389 // Shorthand property | |
390 var obj = {x, y}; //equivalent to {x:x, y:y} | |
dpapad
2016/11/23 01:39:38
Where is y defined? I understand that this is not
Dan Beam
2016/11/30 23:08:54
var foo = 1;
var bar = 2;
var o = {foo, bar};
cons
Dan Beam
2016/12/07 19:41:38
Done.
| |
391 | |
392 // Method property | |
393 var obj = { | |
394 foo() {...}, | |
395 bar() {...} | |
396 } | |
Dan Beam
2016/11/30 23:08:54
var clearSky = {
// basically the same as clouds
Dan Beam
2016/12/07 19:41:39
Done.
| |
397 ``` | |
398 | |
399 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
400 /#sec-object-initialiser) | |
401 | |
402 **Discussion Notes / Link to Thread:** | |
403 | |
404 --- | |
405 | |
406 ## Template Literals | |
407 | |
408 Expression interpolation for Strings, with the ability to access raw template | |
409 pieces. | |
410 | |
411 **Usage Example:** | |
412 | |
413 ``` js | |
414 // Simple example | |
415 var greeting = 'hello'; | |
416 var myName = {first: 'Foo', last: 'Bar'}; | |
417 var message = `${greeting}, | |
418 my name is ${myName.first + myName.last}`; | |
419 // message == 'hello,\nmy name is FooBar' | |
420 | |
421 // Custom interpolation | |
422 function foo (strings, ...values) { | |
Dan Beam
2016/11/30 23:08:54
function foo (
drop space ^
Dan Beam
2016/12/07 19:41:40
Done.
| |
423 // for foo`bar${42}baz`... | |
424 // strings[0] === 'bar'; | |
425 // strings[1] === 'baz'; | |
426 // values[0] === 42; | |
427 | |
428 return strings[1] + strings[0] + values[0]; | |
429 } | |
430 | |
431 var newString = foo`bar${42}baz`; // 'bazbar42' | |
Dan Beam
2016/11/30 23:08:53
can you just drop the last 2 examples (and just ke
Dan Beam
2016/12/07 19:41:39
Done.
| |
432 ``` | |
433 | |
434 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
435 /#sec-template-literals) | |
436 | |
437 **Discussion Notes / Link to Thread:** | |
438 | |
439 --- | |
440 | |
441 ## Binary & Octal Literals | |
442 | |
443 **Usage Example:** | |
444 | |
445 ``` js | |
446 0b111110111 === 503; | |
447 0o767 === 503; | |
448 ``` | |
449 | |
450 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
451 /#sec-literals-numeric-literals) | |
452 | |
453 **Discussion Notes / Link to Thread:** | |
454 | |
455 --- | |
456 | |
457 ## `/u` Unicode Regex Literal | |
458 | |
459 **Usage Example:** | |
460 | |
461 ``` js | |
462 'ð ®·'.match(/./u)[0].length === 2; | |
463 ``` | |
464 | |
465 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
466 /#sec-get-regexp.prototype.sticky) | |
467 | |
468 **Discussion Notes / Link to Thread:** | |
469 | |
470 --- | |
471 | |
472 ## `\u{}` Unicode String | |
473 | |
474 **Usage Example:** | |
475 | |
476 ``` js | |
477 '\u{1d306}' == '\ud834\udf06'; // true | |
478 ``` | |
479 | |
480 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
481 /#sec-literals-string-literals) | |
482 | |
483 **Discussion Notes / Link to Thread:** | |
484 | |
485 --- | |
486 | |
487 ## `/y` Regex Sticky Matching | |
488 | |
489 Keep the matching position sticky between matches and this way support | |
490 efficient parsing of arbitrary long input strings, even with an arbitrary | |
Dan Beam
2016/11/30 23:08:53
arbitrarily long input strings?
Dan Beam
2016/12/07 19:41:39
Done.
| |
491 number of distinct regular expressions. | |
492 | |
493 **Usage Example:** | |
494 | |
495 ``` js | |
496 var re = new RegExp('yy', 'y'); | |
497 re.lastIndex = 3; | |
498 var result = re.exec('xxxyyxx')[0]; | |
499 result === 'yy' && re.lastIndex === 5; // true | |
Dan Beam
2016/11/30 23:08:54
i don't understand this example
| |
500 ``` | |
501 | |
502 **Documentation:** [link](http://es6-features.org | |
503 /#RegularExpressionStickyMatching) | |
504 | |
505 **Discussion Notes / Link to Thread:** | |
506 | |
507 --- | |
508 | |
509 ## Destructuring Assignment | |
510 | |
511 Flexible destructuring of collections or parameters. | |
512 | |
513 **Usage Example:** | |
514 | |
515 ``` js | |
516 // Array | |
517 var list = [ 1, 2, 3 ]; | |
Dan Beam
2016/11/30 23:08:53
note: our ES5 style guide requires no spaces aroun
Dan Beam
2016/12/07 19:41:39
Done.
| |
518 var [ a, , b ] = list; | |
Dan Beam
2016/11/30 23:08:52
var [a, , b] = [1, 2, 3]; // a = 1, b = 3
Dan Beam
2016/12/07 19:41:39
Done.
| |
519 // a = 1, b = 3 | |
520 | |
521 // Object | |
522 var {width, height, area: a} = rect; | |
Dan Beam
2016/11/30 23:08:54
define these variables
Dan Beam
2016/12/07 19:41:39
Done.
| |
523 // width = rect.width, height = rect.height, a = rect.area | |
524 | |
525 // Parameters | |
526 function f ([ name, val ]) { | |
527 console.log(name, val); | |
528 } | |
529 function g ({ name: n, val: v }) { | |
530 console.log(n, v); | |
531 } | |
532 function h ({ name, val }) { | |
533 console.log(name, val); | |
534 } | |
535 | |
536 f([ 'bar', 42 ]); | |
537 g({ name: 'foo', val: 7 }); | |
538 h({ name: 'bar', val: 42 }); | |
Dan Beam
2016/11/30 23:08:53
put the definition and the call of these functions
Dan Beam
2016/12/07 19:41:39
Done.
| |
539 | |
540 ``` | |
541 | |
542 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
543 /#sec-destructuring-assignment) | |
544 | |
545 **Discussion Notes / Link to Thread:** | |
546 | |
547 --- | |
548 | |
549 ## Modules | |
550 | |
551 Support for exporting/importing values from/to modules without global | |
552 namespace pollution. | |
553 | |
554 **Usage Example:** | |
555 | |
556 ``` js | |
557 // lib/rect.js | |
558 export function getArea() {...}; | |
559 export { width, height, unimportant }; | |
560 | |
561 // app.js | |
562 import {getArea, width, height} from 'lib/rect'; | |
563 | |
564 ``` | |
565 | |
566 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
567 /#sec-modules) | |
568 | |
569 **Discussion Notes / Link to Thread:** | |
570 | |
571 --- | |
572 | |
573 ## Symbol Type | |
574 | |
575 Unique and immutable data type to be used as an identifier for object | |
576 properties. | |
577 | |
578 **Usage Example:** | |
579 | |
580 ``` js | |
581 const foo = Symbol(); | |
582 const bar = Symbol(); | |
583 typeof foo === 'symbol'; // true | |
584 typeof bar === 'symbol'; // true | |
585 let obj = {}; | |
586 obj[foo] = 'foo'; | |
587 obj[bar] = 'bar'; | |
588 JSON.stringify(obj); // {} | |
589 Object.keys(obj); // [] | |
590 Object.getOwnPropertyNames(obj); // [] | |
591 Object.getOwnPropertySymbols(obj); // [ foo, bar ] | |
592 ``` | |
593 | |
594 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
595 /#sec-symbol-constructor) | |
596 | |
597 **Discussion Notes / Link to Thread:** | |
598 | |
599 --- | |
600 | |
601 ## `for ...of` Loops | |
602 | |
603 Convenient operator to iterate over all values of an iterable object. | |
Dan Beam
2016/11/30 23:08:53
does this include own keys? as in: can we explain
Dan Beam
2016/12/07 19:41:39
Done.
| |
604 | |
605 **Usage Example:** | |
606 | |
607 ``` js | |
608 // Given an iterable collection `fibonacci`... | |
609 for (let n of fibonacci) { | |
Dan Beam
2016/11/30 23:08:53
nit: can you use var instead of let in this exampl
Dan Beam
2016/12/07 19:41:39
Done.
| |
610 console.log(n); | |
611 } | |
612 ``` | |
613 | |
614 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
615 /#sec-for-in-and-for-of-statements) | |
616 | |
617 **Discussion Notes / Link to Thread:** | |
618 | |
619 --- | |
620 | |
621 ## Object Static Methods | |
622 | |
623 **Usage Example:** | |
624 | |
625 ``` js | |
626 // Object.assign | |
627 var o = Object.assign({a:true}, {b:true}, {c:true}); | |
628 'a' in o && 'b' in o && 'c' in o; // true | |
629 | |
630 // Object.setPrototypeOf | |
631 Object.setPrototypeOf({}, Array.prototype) instanceof Array; //true | |
632 | |
633 // Object.is | |
634 // Object.getOwnPropertySymbols | |
635 ``` | |
636 | |
637 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
638 /#sec-properties-of-the-object-constructor) | |
639 | |
640 **Discussion Notes / Link to Thread:** | |
641 | |
642 --- | |
643 | |
644 ## String Static & Prototype methods | |
645 | |
646 **Usage Example:** | |
647 | |
648 ``` js | |
649 // String.raw | |
650 // String.fromCodePoint | |
651 | |
652 // String.prototype.codePointAt | |
653 // String.prototype.normalize | |
654 // String.prototype.repeat | |
655 // String.prototype.startsWith | |
656 // String.prototype.endsWith | |
657 // String.prototype.includes | |
658 ``` | |
659 | |
660 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
661 /#sec-properties-of-the-string-constructor) | |
662 | |
663 **Discussion Notes / Link to Thread:** | |
664 | |
665 --- | |
666 | |
667 ## Array Static & Prototype Methods | |
668 | |
669 **Usage Example:** | |
670 | |
671 ``` js | |
672 // Array.from | |
673 // Array.of | |
674 | |
675 // Array.prototype.copyWithin | |
676 // Array.prototype.find | |
677 // Array.prototype.findIndex | |
678 // Array.prototype.fill | |
679 // Array.prototype.keys | |
680 // Array.prototype.values | |
681 // Array.prototype.entries | |
682 ``` | |
683 | |
684 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
685 /#sec-properties-of-the-array-constructor) | |
686 | |
687 **Discussion Notes / Link to Thread:** | |
688 | |
689 --- | |
690 | |
691 ## Number Properties | |
692 | |
693 **Usage Example:** | |
694 | |
695 ``` js | |
696 // Number.isFinite | |
697 // Number.isInteger | |
698 // Number.isSafeInteger | |
699 // Number.isNaN | |
700 // Number.EPSILON | |
701 // Number.MIN_SAFE_INTEGER | |
702 // Number.MAX_SAFE_INTEGER | |
703 ``` | |
704 | |
705 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
706 /#sec-isfinite-number) | |
707 | |
708 **Discussion Notes / Link to Thread:** | |
709 | |
710 --- | |
711 | |
712 ## Iterators | |
713 | |
714 **Usage Example:** | |
715 | |
716 ``` js | |
717 let fibonacci = { | |
718 [Symbol.iterator]() { | |
719 let pre = 0, cur = 1; | |
720 return { | |
721 next () { | |
722 [ pre, cur ] = [ cur, pre + cur ]; | |
723 return { done: false, value: cur }; | |
724 } | |
725 }; | |
726 } | |
727 }; | |
728 ``` | |
729 | |
730 **Documentation:** [link]() | |
731 | |
732 **Discussion Notes / Link to Thread:** | |
733 | |
734 --- | |
735 | |
736 ## Generators | |
737 | |
738 Special iterators with specified pausing points. | |
739 | |
740 **Usage Example:** | |
741 | |
742 ``` js | |
743 function* range(start, end, step) { | |
744 while (start < end) { | |
745 yield start; | |
746 start += step; | |
747 } | |
748 } | |
749 | |
750 for (let i of range(0, 10, 2)) { | |
751 console.log(i); // 0, 2, 4, 6, 8 | |
752 } | |
753 | |
754 ``` | |
755 | |
756 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
757 /#sec-generator-function-definitions) | |
758 | |
759 **Discussion Notes / Link to Thread:** | |
760 | |
761 --- | |
762 | |
763 ## `Map` | |
764 | |
765 **Usage Example:** | |
766 | |
767 ``` js | |
768 var key = {}; | |
769 var map = new Map(); | |
770 | |
dpapad
2016/11/23 01:39:38
Let's boost this example to be a bit more descript
Dan Beam
2016/11/30 23:08:53
agreed
Dan Beam
2016/12/07 19:41:39
Done.
| |
771 map.set(key, 123); | |
772 | |
773 map.has(key) && map.get(key) === 123; // true | |
774 ``` | |
775 | |
776 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
777 /#sec-map-objects) | |
778 | |
779 **Discussion Notes / Link to Thread:** | |
780 | |
781 --- | |
782 | |
783 ## `Set` | |
784 | |
785 **Usage Example:** | |
786 | |
787 ``` js | |
788 var obj = {}; | |
dpapad
2016/11/23 01:39:38
obj is not used in this example.
Dan Beam
2016/12/07 19:41:39
Done.
| |
789 var set = new Set(); | |
790 | |
791 set.add(123); | |
792 set.add(123); | |
dpapad
2016/11/23 01:39:38
set.size == 1; // true
Dan Beam
2016/11/30 23:08:53
agreed
Dan Beam
2016/12/07 19:41:40
Done.
| |
793 | |
794 set.has(123); // true | |
795 ``` | |
796 | |
797 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
798 /#sec-set-objects) | |
799 | |
800 **Discussion Notes / Link to Thread:** | |
801 | |
802 --- | |
803 | |
804 ## `WeakMap` | |
805 | |
806 WeakMap does not prevent garbage collection if nothing else refers to an object | |
807 within the collection. | |
808 | |
809 **Usage Example:** | |
810 | |
811 ``` js | |
812 var key = {}; | |
813 var weakmap = new WeakMap(); | |
814 | |
815 weakmap.set(key, 123); | |
816 | |
817 weakmap.has(key) && weakmap.get(key) === 123; // true | |
818 ``` | |
819 | |
820 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
821 /#sec-weakmap-objects) | |
822 | |
823 **Discussion Notes / Link to Thread:** | |
824 | |
825 --- | |
826 | |
827 ## `WeakSet` | |
828 | |
829 WeakSet does not prevent garbage collection if nothing else refers to an object | |
830 within the collection. | |
831 | |
832 **Usage Example:** | |
833 | |
834 ``` js | |
835 var obj1 = {}; | |
836 var weakset = new WeakSet(); | |
837 | |
838 weakset.add(obj1); | |
839 weakset.add(obj1); | |
840 | |
841 weakset.has(obj1); // true | |
842 ``` | |
843 | |
844 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
845 /#sec-weakset-objects) | |
846 | |
847 **Discussion Notes / Link to Thread:** | |
848 | |
849 --- | |
850 | |
851 ## Typed Arrays | |
852 | |
853 A lot of new typed Arrays... | |
854 | |
855 **Usage Example:** | |
856 | |
857 ``` js | |
858 new Int8Array(); | |
859 new UInt8Array(); | |
860 new UInt8ClampedArray() | |
Dan Beam
2016/11/30 23:08:53
nit: new UInt8ClampedArray();
Dan Beam
2016/12/07 19:41:40
Done.
| |
861 // ...You get the idea. Click on the Documentation link below to see all. | |
862 ``` | |
863 | |
864 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
865 /#sec-typedarray-objects) | |
866 | |
867 **Discussion Notes / Link to Thread:** | |
868 | |
869 --- | |
870 | |
871 ## `Proxy` | |
872 | |
873 Hooking into runtime-level object meta-operations. | |
874 | |
875 **Usage Example:** | |
876 | |
877 ``` js | |
878 let target = { | |
879 foo: 'Welcome, foo' | |
880 }; | |
881 let proxy = new Proxy(target, { | |
882 get (receiver, name) { | |
883 return name in receiver ? receiver[name] : `Hello, ${name}`; | |
884 } | |
885 }); | |
Dan Beam
2016/11/30 23:08:53
var keyTracker = new Proxy({}, {
keysCreated: 0,
Dan Beam
2016/12/07 19:41:39
Done.
| |
886 proxy.foo === 'Welcome, foo'; // true | |
887 proxy.world === 'Hello, world'; // true | |
888 ``` | |
889 | |
890 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
891 /#sec-proxy-object-internal-methods-and-internal-slots) | |
892 | |
893 **Discussion Notes / Link to Thread:** | |
894 | |
895 --- | |
896 | |
897 ## `Reflection` | |
898 | |
899 Make calls corresponding to the object meta-operations. | |
900 | |
901 **Usage Example:** | |
902 | |
903 ``` js | |
904 let obj = { a: 1 }; | |
905 Object.defineProperty(obj, 'b', { value: 2 }); | |
906 obj[Symbol('c')] = 3; | |
907 Reflect.ownKeys(obj); // ['a', 'b', Symbol(c)] | |
908 ``` | |
909 | |
910 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
911 /#sec-reflection) | |
912 | |
913 **Discussion Notes / Link to Thread:** | |
914 | |
915 --- | |
916 | |
917 ## Math Methods | |
918 | |
919 A lot of new Math methods. | |
920 | |
921 **Usage Example:** | |
922 | |
923 ``` js | |
924 // See Doc | |
925 ``` | |
926 | |
927 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0 | |
928 /#sec-math) | |
929 | |
930 **Discussion Notes / Link to Thread:** | |
931 | |
932 --- | |
OLD | NEW |