回答編集履歴

1

Object.create(null)

2017/12/11 08:45

投稿

think49
think49

スコア18156

test CHANGED
@@ -1,6 +1,26 @@
1
+ ### 数値添字配列
2
+
3
+
4
+
1
5
  JavaScriptの配列は**数値添字配列**であり、文字列添字配列に対応していないからです。
2
6
 
3
- 文字列添字配列が必要な場合は、オブジェクト初期化子もしくは `new Map` を使用する事になります。
7
+ 文字列添字配列が必要な場合は、次のいずれかを使用する事になります。
8
+
9
+
10
+
11
+ - オブジェクト初期化子(`{}`)
12
+
13
+ - `Object.create(null)`
14
+
15
+ - `new Map`
16
+
17
+
18
+
19
+ ### new Map
20
+
21
+
22
+
23
+ Map には `Map.prototype.forEach` があるので、比較的扱いやすいといえます。
4
24
 
5
25
 
6
26
 
@@ -36,6 +56,56 @@
36
56
 
37
57
  console.log(JSON.stringify([...map.entries()])); // [["a","1"],["b","2"],["c","3"]]
38
58
 
59
+
60
+
61
+ map.forEach((value, key) => console.log(value, key));
62
+
63
+ ```
64
+
65
+
66
+
67
+ ### Object.create(null)
68
+
69
+
70
+
71
+ `Object.create(null)` は `{}` とほぼ等価ですが、プロトタイプ上にオブジェクトが存在しない為、`__proto__` 等の規定値となる名前もキー名に出来るメリットがあります。
72
+
73
+
74
+
75
+ ```JavaScript
76
+
77
+ 'use strict';
78
+
79
+ function foo2 (string) {
80
+
81
+ var object = Object.create(null);
82
+
83
+
84
+
85
+ for (var i = 0, array = string.split(','), len = array.length, entry; i < len; ++i) {
86
+
87
+ entry = array[i].split(':');
88
+
89
+ object[entry[0]] = entry[1];
90
+
91
+ }
92
+
93
+
94
+
95
+ return object;
96
+
97
+ }
98
+
99
+
100
+
101
+ var object = foo2('a:1,b:2,c:3');
102
+
103
+
104
+
105
+ console.log(object.a); // 1
106
+
107
+ Object.keys(object).forEach(key => console.log(key, object[key]));
108
+
39
109
  ```
40
110
 
41
111