回答編集履歴

4

等価コードを書き換えました\(2\)

2015/11/03 21:32

投稿

think49
think49

スコア18164

test CHANGED
@@ -76,15 +76,9 @@
76
76
 
77
77
  ```JavaScript
78
78
 
79
- var o = {x:1, y:2, z:3};
79
+ for (var i = 0, l = keys.length; i < l; i++) {
80
80
 
81
- var a = [], i = 0;
81
+ a[i] = keys[i];
82
-
83
- var keys = Object.keys(o); // ['x', 'y', 'z']
84
-
85
-
86
-
87
- for (var i = 0, l = keys.length; i < l, a[i] = keys[i]; i++) {
88
82
 
89
83
  console.log(a);
90
84
 
@@ -104,6 +98,6 @@
104
98
 
105
99
 
106
100
 
107
- **(2015/11/04 06:30追記)**
101
+ **(2015/11/04 06:32追記)**
108
102
 
109
103
  等価コードを書き換えました。

3

等価コードを書き換えました

2015/11/03 21:32

投稿

think49
think49

スコア18164

test CHANGED
@@ -84,11 +84,9 @@
84
84
 
85
85
 
86
86
 
87
- for (var i = 0, l = keys.length, keylist = []; i < l; i++) {
87
+ for (var i = 0, l = keys.length; i < l, a[i] = keys[i]; i++) {
88
88
 
89
- keylist.push(keys[i]);
90
-
91
- console.log(keylist);
89
+ console.log(a);
92
90
 
93
91
  console.log(i);
94
92
 
@@ -103,3 +101,9 @@
103
101
 
104
102
 
105
103
  - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
104
+
105
+
106
+
107
+ **(2015/11/04 06:30追記)**
108
+
109
+ 等価コードを書き換えました。

2

Firefoxのバグ云々の記述削除\(私のケアレスミスによる勘違いだったようです\)

2015/11/03 21:30

投稿

think49
think49

スコア18164

test CHANGED
@@ -103,15 +103,3 @@
103
103
 
104
104
 
105
105
  - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
106
-
107
-
108
-
109
- ちなみに、`for (a[i] in o)` は **Firefox 41.2 で SyntaxError** になります。
110
-
111
- ですので残念ながら、このコードを使うのは現実的ではないですね。
112
-
113
- `Object.keys` や `for-in` 内の block 文内でコードを書けば実質的には問題ありませんが。
114
-
115
- JavaScript はブラウザで実行するものなので複数のブラウザで確認するよう気をつけてください。
116
-
117
- また、コードは再現性が大切なので質問する時には環境(ブラウザの名前とバージョン)を示した方が良いと思います。

1

for \(a\[i\] in o\) のコード追加

2015/11/03 14:41

投稿

think49
think49

スコア18164

test CHANGED
@@ -39,3 +39,79 @@
39
39
  大抵のコーディング規約では `{}` の省略は禁止されますし、バグの元となります。
40
40
 
41
41
  しっかりと理解して書く分には問題ないともいえますが、勉強中なら省略するメリットがないと思います。
42
+
43
+
44
+
45
+ **(2015/11/03 23:21追記)**
46
+
47
+ [Javascriptのオブジェクトについて(19181)|teratail](https://teratail.com/questions/19181#r29932) のコードを元に次のコードを考察します。
48
+
49
+
50
+
51
+ ```JavaScript
52
+
53
+ var o = {x:1, y:2, z:3};
54
+
55
+ var a = [], i = 0;
56
+
57
+
58
+
59
+ for (a[i] in o) {
60
+
61
+ console.log(a);
62
+
63
+ console.log(i++);
64
+
65
+ }
66
+
67
+ ```
68
+
69
+
70
+
71
+ `a[i]` は繰り返し評価され、`a[i] = propertyName` が実行されます。
72
+
73
+ 先のコードは下記コードとほぼ等価です(厳密には違います)。
74
+
75
+
76
+
77
+ ```JavaScript
78
+
79
+ var o = {x:1, y:2, z:3};
80
+
81
+ var a = [], i = 0;
82
+
83
+ var keys = Object.keys(o); // ['x', 'y', 'z']
84
+
85
+
86
+
87
+ for (var i = 0, l = keys.length, keylist = []; i < l; i++) {
88
+
89
+ keylist.push(keys[i]);
90
+
91
+ console.log(keylist);
92
+
93
+ console.log(i);
94
+
95
+ }
96
+
97
+ ```
98
+
99
+ `console.log` については開発者ツールを使って下さい。
100
+
101
+ テストコードについては `document.write` よりも有用です。
102
+
103
+
104
+
105
+ - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
106
+
107
+
108
+
109
+ ちなみに、`for (a[i] in o)` は **Firefox 41.2 で SyntaxError** になります。
110
+
111
+ ですので残念ながら、このコードを使うのは現実的ではないですね。
112
+
113
+ `Object.keys` や `for-in` 内の block 文内でコードを書けば実質的には問題ありませんが。
114
+
115
+ JavaScript はブラウザで実行するものなので複数のブラウザで確認するよう気をつけてください。
116
+
117
+ また、コードは再現性が大切なので質問する時には環境(ブラウザの名前とバージョン)を示した方が良いと思います。