Set.prototype.keys と Set.prototype.values
ECMA-262 6th Edition によると「Set.prototype.keys
の初期値は Set.prototype.values
の初期値と同じ関数オブジェクト」とあります。
- 23.2.3.8 Set.prototype.keys – ECMA-262 6th Edition
- 23.2.3.10 Set.prototype.values – ECMA-262 6th Edition
JavaScript
1'use strict'; 2var s = new Set(['a', 'b', 'c', 'a']), 3 valuesArray = [], 4 keysArray = []; 5 6for (var value of s.values()) { 7 valuesArray.push(value); 8} 9 10for (var key of s.keys()) { 11 keysArray.push(key); 12} 13 14console.log(JSON.stringify(valuesArray)); // ["a","b","c"] 15console.log(JSON.stringify(keysArray)); // ["a","b","c"] 16 17var values = s.values(); 18console.log(values.next().value); // "a" 19console.log(values.next().value); // "b" 20console.log(values.next().value); // "c" 21console.log(values.next().value); // undefined 22 23var keys = s.keys(); 24console.log(keys.next().value); // "a" 25console.log(keys.next().value); // "b" 26console.log(keys.next().value); // "c" 27console.log(keys.next().value); // undefined 28 29console.log(s.keys === s.values); // true 30console.log(Set.prototype.keys === Set.prototype.values); // true 31console.log(s.keys.toString()); // function values() { [native code] }
この通り、どちらも value のイテレータ(SetIterator)を返します。
Set.prototype.entries
一方、Set.prototype.entries
では key+value のイテレータ(SetIterator)を返します。
ここで key, value は同値として扱われます。
JavaScript
1'use strict'; 2var s = new Set(['a', 'b', 'c', 'a']), 3 entriesArray = []; 4 5for (var entry of s.entries()) { 6 entriesArray.push(entry); 7} 8 9console.log(JSON.stringify(entriesArray)); // [["a","a"],["b","b"],["c","c"]]
Set.prototype.keys, Set.prototype.entries の存在意義は?
実際にコーディングする場合、Set.prototype.values
があれば必要十分に思えます。
Set.prototype.keys
, Set.prototype.entries
はどのような用途/設計において有効なAPIなのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/25 03:30 編集
2016/08/01 15:26