teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

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

2015/11/03 21:32

投稿

think49
think49

スコア18194

answer CHANGED
@@ -37,11 +37,8 @@
37
37
  先のコードは下記コードとほぼ等価です(厳密には違います)。
38
38
 
39
39
  ```JavaScript
40
- var o = {x:1, y:2, z:3};
41
- var a = [], i = 0;
42
- var keys = Object.keys(o); // ['x', 'y', 'z']
43
-
44
- for (var i = 0, l = keys.length; i < l, a[i] = keys[i]; i++) {
40
+ for (var i = 0, l = keys.length; i < l; i++) {
41
+ a[i] = keys[i];
45
42
  console.log(a);
46
43
  console.log(i);
47
44
  }
@@ -51,5 +48,5 @@
51
48
 
52
49
  - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
53
50
 
54
- **(2015/11/04 06:30追記)**
51
+ **(2015/11/04 06:32追記)**
55
52
  等価コードを書き換えました。

3

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

2015/11/03 21:32

投稿

think49
think49

スコア18194

answer CHANGED
@@ -41,13 +41,15 @@
41
41
  var a = [], i = 0;
42
42
  var keys = Object.keys(o); // ['x', 'y', 'z']
43
43
 
44
- for (var i = 0, l = keys.length, keylist = []; i < l; i++) {
44
+ for (var i = 0, l = keys.length; i < l, a[i] = keys[i]; i++) {
45
- keylist.push(keys[i]);
46
- console.log(keylist);
45
+ console.log(a);
47
46
  console.log(i);
48
47
  }
49
48
  ```
50
49
  `console.log` については開発者ツールを使って下さい。
51
50
  テストコードについては `document.write` よりも有用です。
52
51
 
53
- - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
52
+ - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
53
+
54
+ **(2015/11/04 06:30追記)**
55
+ 等価コードを書き換えました。

2

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

2015/11/03 21:30

投稿

think49
think49

スコア18194

answer CHANGED
@@ -50,10 +50,4 @@
50
50
  `console.log` については開発者ツールを使って下さい。
51
51
  テストコードについては `document.write` よりも有用です。
52
52
 
53
- - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
53
+ - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
54
-
55
- ちなみに、`for (a[i] in o)` は **Firefox 41.2 で SyntaxError** になります。
56
- ですので残念ながら、このコードを使うのは現実的ではないですね。
57
- `Object.keys` や `for-in` 内の block 文内でコードを書けば実質的には問題ありませんが。
58
- JavaScript はブラウザで実行するものなので複数のブラウザで確認するよう気をつけてください。
59
- また、コードは再現性が大切なので質問する時には環境(ブラウザの名前とバージョン)を示した方が良いと思います。

1

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

2015/11/03 14:41

投稿

think49
think49

スコア18194

answer CHANGED
@@ -18,4 +18,42 @@
18
18
  **for-in における {} の省略**
19
19
  `for-in` 文では `{}` を省略する事で後述する一つの文(Statement)を処理しますが、基本的には `{}` で括ることをお勧めします。
20
20
  大抵のコーディング規約では `{}` の省略は禁止されますし、バグの元となります。
21
- しっかりと理解して書く分には問題ないともいえますが、勉強中なら省略するメリットがないと思います。
21
+ しっかりと理解して書く分には問題ないともいえますが、勉強中なら省略するメリットがないと思います。
22
+
23
+ **(2015/11/03 23:21追記)**
24
+ [Javascriptのオブジェクトについて(19181)|teratail](https://teratail.com/questions/19181#r29932) のコードを元に次のコードを考察します。
25
+
26
+ ```JavaScript
27
+ var o = {x:1, y:2, z:3};
28
+ var a = [], i = 0;
29
+
30
+ for (a[i] in o) {
31
+ console.log(a);
32
+ console.log(i++);
33
+ }
34
+ ```
35
+
36
+ `a[i]` は繰り返し評価され、`a[i] = propertyName` が実行されます。
37
+ 先のコードは下記コードとほぼ等価です(厳密には違います)。
38
+
39
+ ```JavaScript
40
+ var o = {x:1, y:2, z:3};
41
+ var a = [], i = 0;
42
+ var keys = Object.keys(o); // ['x', 'y', 'z']
43
+
44
+ for (var i = 0, l = keys.length, keylist = []; i < l; i++) {
45
+ keylist.push(keys[i]);
46
+ console.log(keylist);
47
+ console.log(i);
48
+ }
49
+ ```
50
+ `console.log` については開発者ツールを使って下さい。
51
+ テストコードについては `document.write` よりも有用です。
52
+
53
+ - [console chrome developer tools - Google 検索](https://www.google.co.jp/search?hl=ja&ie=UTF-8&q=console+chrome+developer+tools)
54
+
55
+ ちなみに、`for (a[i] in o)` は **Firefox 41.2 で SyntaxError** になります。
56
+ ですので残念ながら、このコードを使うのは現実的ではないですね。
57
+ `Object.keys` や `for-in` 内の block 文内でコードを書けば実質的には問題ありませんが。
58
+ JavaScript はブラウザで実行するものなので複数のブラウザで確認するよう気をつけてください。
59
+ また、コードは再現性が大切なので質問する時には環境(ブラウザの名前とバージョン)を示した方が良いと思います。