回答編集履歴
1
typo修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
グローバル変数はグローバルオブジェクト(`window`)のプロパティでもある為、グローバル変数 `name` は `window.name` と衝突します。
|
4
4
|
`window.name` は String 型のプロパティとして定義されている為、String 型に強制的に変換されます。
|
5
5
|
String 型は ES5 から配列のように参照可能になっており、`string[0]` は `string.charAt(0)` と同じ値を返します。
|
6
|
-
従って、
|
6
|
+
従って、グローバル変数 `name` は String 型に変換され、`for-in` で1文字ずつ値を返すようになってしまいます。
|
7
7
|
解決法としては関数内で変数を定義して下さい。
|
8
8
|
変数名を変更することでも回避可能ですが、`window` のプロパティは新しい仕様が生まれる度に増えていく運命にあります。
|
9
9
|
仕様が増える度に変数名が衝突する懸念があるのでローカル変数として定義した方が安全度が高いと思われます。
|