Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: docs/es6_chromium.md

Issue 2965543002: Move Map/Set to allowed features of ES6 styleguide. (Closed)
Patch Set: Address comment. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!-- Feature template markdown: 1 <!-- Feature template markdown:
2 ## Header 2 ## Header
3 3
4 **Usage Example:** 4 **Usage Example:**
5 5
6 ```js 6 ```js
7 7
8 ``` 8 ```
9 9
10 **Documentation:** [link]() 10 **Documentation:** [link]()
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 previous discussion. If the list arrives at some consensus, send a codereview 103 previous discussion. If the list arrives at some consensus, send a codereview
104 to change this file accordingly, linking to your discussion thread. 104 to change this file accordingly, linking to your discussion thread.
105 105
106 > Some descriptions and Usage examples are from [kangax](https://kangax.github.i o/compat-table/es6/) 106 > Some descriptions and Usage examples are from [kangax](https://kangax.github.i o/compat-table/es6/)
107 and [http://es6-features.org/](http://es6-features.org/) 107 and [http://es6-features.org/](http://es6-features.org/)
108 108
109 # Allowed Features 109 # Allowed Features
110 110
111 The following features are allowed in Chromium development. 111 The following features are allowed in Chromium development.
112 112
113 ## `=>` (Arrow Functions) 113 ## => (Arrow Functions)
114 114
115 Arrow functions provide a concise syntax to create a function, and fix a number 115 Arrow functions provide a concise syntax to create a function, and fix a number
116 of difficulties with `this` (e.g. eliminating the need to write `const self = 116 of difficulties with `this` (e.g. eliminating the need to write `const self =
117 this`). Particularly useful for nested functions or callbacks. 117 this`). Particularly useful for nested functions or callbacks.
118 118
119 Prefer arrow functions over `.bind(this)`. 119 Prefer arrow functions over `.bind(this)`.
120 120
121 Arrow functions have an implicit return when used without a body block. 121 Arrow functions have an implicit return when used without a body block.
122 122
123 **Usage Example:** 123 **Usage Example:**
(...skipping 19 matching lines...) Expand all
143 143
144 **Discussion Notes / Link to Thread:** 144 **Discussion Notes / Link to Thread:**
145 145
146 **Note**: => does not work in iOS9. Don't use it in code that runs on Chrome fo r 146 **Note**: => does not work in iOS9. Don't use it in code that runs on Chrome fo r
147 iOS. There's a presubmit that should warn you about this. 147 iOS. There's a presubmit that should warn you about this.
148 148
149 [Discussion thread](https://groups.google.com/a/chromium.org/forum/#!topic/chrom ium-dev/iJrC4PVSfoU) 149 [Discussion thread](https://groups.google.com/a/chromium.org/forum/#!topic/chrom ium-dev/iJrC4PVSfoU)
150 150
151 --- 151 ---
152 152
153 ## `Promise` 153 ## Promise
154 154
155 The Promise object is used for asynchronous computations. A Promise represents a 155 The Promise object is used for asynchronous computations. A Promise represents a
156 value which may be available now, or in the future, or never. 156 value which may be available now, or in the future, or never.
157 157
158 **Usage Example:** 158 **Usage Example:**
159 159
160 ```js 160 ```js
161 /** @type {!Promise} */ 161 /** @type {!Promise} */
162 var fullyLoaded = new Promise(function(resolve) { 162 var fullyLoaded = new Promise(function(resolve) {
163 function isLoaded() { return document.readyState == 'complete'; } 163 function isLoaded() { return document.readyState == 'complete'; }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 217
218 **Discussion Notes / Link to Thread:** 218 **Discussion Notes / Link to Thread:**
219 https://groups.google.com/a/chromium.org/d/msg/chromium-dev/S1h-0m2ohOw/jyaiMGDl CwAJ 219 https://groups.google.com/a/chromium.org/d/msg/chromium-dev/S1h-0m2ohOw/jyaiMGDl CwAJ
220 220
221 **Note**: Not fully supported in iOS9. Don't use it in code that runs on Chrome 221 **Note**: Not fully supported in iOS9. Don't use it in code that runs on Chrome
222 for iOS, unless you can verify it works. TODO: Remove this note once support for 222 for iOS, unless you can verify it works. TODO: Remove this note once support for
223 iOS9 is dropped. 223 iOS9 is dropped.
224 224
225 --- 225 ---
226 226
227 ## Map
228
229 A simple key/value map in which any value (both objects and primitive values)
230 may be used as either a key or a value.
231
232 **Usage Example:**
233
234 ```js
235 var map = new Map();
236 map.size === 0; // true
237 map.get('foo'); // undefined
238
239 var key = 54;
240 map.set(key, 123);
241 map.size === 1; // true
242 map.has(key); // true
243 map.get(key); // 123
244
245 map.delete(key);
246 map.has(key); // false
247 map.size === 0; // true
248 ```
249
250 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ma p-objects)
251 [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ Objects/Map)
252
253 **Discussion Notes:** Feature already extensively used prior to creation of
254 this document.
255
256 ---
257
258 ## Set
259
260 An object that lets you store unique values of any type, whether primitive
261 values or object references.
262
263 **Usage Example:**
264
265 ```js
266 var set = new Set();
267
268 set.add(123);
269 set.size(); // 1
270 set.has(123); // true
271
272 set.add(123);
273 set.size(); // 1
274 ```
275
276 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-se t-objects)
277 [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ Objects/Set)
278
279 **Discussion Notes:** Feature already extensively used prior to creation of
280 this document.
281
282 ---
283
227 # Banned Features 284 # Banned Features
228 285
229 The following features are banned for Chromium development. 286 The following features are banned for Chromium development.
230 287
231 # Features To Be Discussed 288 # Features To Be Discussed
232 289
233 The following features are currently disallowed. See the top of this page on 290 The following features are currently disallowed. See the top of this page on
234 how to propose moving a feature from this list into the allowed or banned 291 how to propose moving a feature from this list into the allowed or banned
235 sections. 292 sections.
236 293
237 ## `let` (Block-Scoped Variables) 294 ## let (Block-Scoped Variables)
238 295
239 `let` declares a variable within the scope of a block. This differs from `var`, 296 `let` declares a variable within the scope of a block. This differs from `var`,
240 which uses function level scope. 297 which uses function level scope.
241 298
242 **Usage Example:** 299 **Usage Example:**
243 300
244 ```js 301 ```js
245 // Scope. 302 // Scope.
246 function varTest() { 303 function varTest() {
247 var x = 1; 304 var x = 1;
(...skipping 22 matching lines...) Expand all
270 let b = 'mundo; // TypeError Identifier 'b' has already been declared. 327 let b = 'mundo; // TypeError Identifier 'b' has already been declared.
271 } 328 }
272 ``` 329 ```
273 330
274 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-le t-and-const-declarations) 331 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-le t-and-const-declarations)
275 332
276 **Discussion Notes / Link to Thread:** 333 **Discussion Notes / Link to Thread:**
277 334
278 --- 335 ---
279 336
280 ## `const` (Block-Scoped Constants) 337 ## const (Block-Scoped Constants)
281 338
282 Constants (also known as "immutable variables") are variables which cannot be 339 Constants (also known as "immutable variables") are variables which cannot be
283 re-assigned new content. Note that if the value is an object, the object itself 340 re-assigned new content. Note that if the value is an object, the object itself
284 is still mutable. 341 is still mutable.
285 342
286 Also note that in Chrome, `const` is block scoped like `let`. 343 Also note that in Chrome, `const` is block scoped like `let`.
287 344
288 **Usage Example:** 345 **Usage Example:**
289 346
290 ```js 347 ```js
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 Object.getOwnPropertyNames(obj); // [] 669 Object.getOwnPropertyNames(obj); // []
613 Object.getOwnPropertySymbols(obj); // [foo, bar] 670 Object.getOwnPropertySymbols(obj); // [foo, bar]
614 ``` 671 ```
615 672
616 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-sy mbol-constructor) 673 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-sy mbol-constructor)
617 674
618 **Discussion Notes / Link to Thread:** 675 **Discussion Notes / Link to Thread:**
619 676
620 --- 677 ---
621 678
622 ## `for ...of` Loops 679 ## for...of Loops
623 680
624 Convenient operator to iterate over all values in an iterable collection. This 681 Convenient operator to iterate over all values in an iterable collection. This
625 differs from `for ...in`, which iterates over all iterable properties. 682 differs from `for ...in`, which iterates over all iterable properties.
626 683
627 **Usage Example:** 684 **Usage Example:**
628 685
629 ```js 686 ```js
630 // Given an iterable collection fibonacci numbers... 687 // Given an iterable collection fibonacci numbers...
631 for (var n of fibonacci) { 688 for (var n of fibonacci) {
632 console.log(n); // 1, 1, 2, 3, ... 689 console.log(n); // 1, 1, 2, 3, ...
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 } 831 }
775 832
776 ``` 833 ```
777 834
778 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ge nerator-function-definitions) 835 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ge nerator-function-definitions)
779 836
780 **Discussion Notes / Link to Thread:** 837 **Discussion Notes / Link to Thread:**
781 838
782 --- 839 ---
783 840
784 ## `Map` 841 ## WeakMap
785
786 A simple key/value map in which any value (both objects and primitive values)
787 may be used as either a key or a value.
788
789 **Usage Example:**
790
791 ```js
792 var map = new Map();
793 map.size === 0; // true
794 map.get('foo'); // undefined
795
796 var key = {};
797 map.set(key, 123);
798 map.size === 1; // true
799 map.has(key); // true
800 map.get(key); // 123
801
802 map.delete(key);
803 map.has(key); // false
804 map.size === 0; // true
805 ```
806
807 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ma p-objects)
808 [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ Objects/Map)
809
810 **Discussion Notes / Link to Thread:**
811
812 ---
813
814 ## `Set`
815
816 An object that lets you store unique values of any type, whether primitive
817 values or object references.
818
819 **Usage Example:**
820
821 ```js
822 var set = new Set();
823
824 set.add(123);
825 set.size(); // 1
826 set.has(123); // true
827
828 set.add(123);
829 set.size(); // 1
830 ```
831
832 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-se t-objects)
833 [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ Objects/Set)
834
835 **Discussion Notes / Link to Thread:**
836
837 ---
838
839 ## `WeakMap`
840 842
841 WeakMap does not prevent garbage collection if nothing else refers to an object 843 WeakMap does not prevent garbage collection if nothing else refers to an object
842 within the collection. 844 within the collection.
843 845
844 **Usage Example:** 846 **Usage Example:**
845 847
846 ```js 848 ```js
847 var key = {}; 849 var key = {};
848 var weakmap = new WeakMap(); 850 var weakmap = new WeakMap();
849 851
850 weakmap.set(key, 123); 852 weakmap.set(key, 123);
851 853
852 weakmap.has(key) && weakmap.get(key) === 123; // true 854 weakmap.has(key) && weakmap.get(key) === 123; // true
853 ``` 855 ```
854 856
855 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-we akmap-objects) 857 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-we akmap-objects)
856 858
857 **Discussion Notes / Link to Thread:** 859 **Discussion Notes / Link to Thread:**
858 860
859 --- 861 ---
860 862
861 ## `WeakSet` 863 ## WeakSet
862 864
863 WeakSet does not prevent garbage collection if nothing else refers to an object 865 WeakSet does not prevent garbage collection if nothing else refers to an object
864 within the collection. 866 within the collection.
865 867
866 **Usage Example:** 868 **Usage Example:**
867 869
868 ```js 870 ```js
869 var obj1 = {}; 871 var obj1 = {};
870 var weakset = new WeakSet(); 872 var weakset = new WeakSet();
871 873
(...skipping 21 matching lines...) Expand all
893 new UInt8ClampedArray(); 895 new UInt8ClampedArray();
894 // ... You get the idea. Click on the Documentation link below to see all. 896 // ... You get the idea. Click on the Documentation link below to see all.
895 ``` 897 ```
896 898
897 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ty pedarray-objects) 899 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ty pedarray-objects)
898 900
899 **Discussion Notes / Link to Thread:** 901 **Discussion Notes / Link to Thread:**
900 902
901 --- 903 ---
902 904
903 ## `Proxy` 905 ## Proxy
904 906
905 Hooking into runtime-level object meta-operations. 907 Hooking into runtime-level object meta-operations.
906 908
907 **Usage Example:** 909 **Usage Example:**
908 910
909 ```js 911 ```js
910 var keyTracker = new Proxy({}, { 912 var keyTracker = new Proxy({}, {
911 keysCreated: 0, 913 keysCreated: 0,
912 914
913 get (receiver, key) { 915 get (receiver, key) {
(...skipping 11 matching lines...) Expand all
925 keyTracker.key1; // 'key already exists' 927 keyTracker.key1; // 'key already exists'
926 keyTracker.key2; // '2 keys created!' 928 keyTracker.key2; // '2 keys created!'
927 ``` 929 ```
928 930
929 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-pr oxy-object-internal-methods-and-internal-slots) 931 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-pr oxy-object-internal-methods-and-internal-slots)
930 932
931 **Discussion Notes / Link to Thread:** 933 **Discussion Notes / Link to Thread:**
932 934
933 --- 935 ---
934 936
935 ## `Reflection` 937 ## Reflection
936 938
937 Make calls corresponding to the object meta-operations. 939 Make calls corresponding to the object meta-operations.
938 940
939 **Usage Example:** 941 **Usage Example:**
940 942
941 ```js 943 ```js
942 let obj = {a: 1}; 944 let obj = {a: 1};
943 Object.defineProperty(obj, 'b', {value: 2}); 945 Object.defineProperty(obj, 'b', {value: 2});
944 obj[Symbol('c')] = 3; 946 obj[Symbol('c')] = 3;
945 Reflect.ownKeys(obj); // ['a', 'b', Symbol(c)] 947 Reflect.ownKeys(obj); // ['a', 'b', Symbol(c)]
(...skipping 13 matching lines...) Expand all
959 961
960 ```js 962 ```js
961 // See Doc 963 // See Doc
962 ``` 964 ```
963 965
964 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ma th) 966 **Documentation:** [link](http://www.ecma-international.org/ecma-262/6.0/#sec-ma th)
965 967
966 **Discussion Notes / Link to Thread:** 968 **Discussion Notes / Link to Thread:**
967 969
968 --- 970 ---
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698