2017-02-17 13 views
3

誰かがちょうどプログラミングを学習し、これにつまずいたと困惑私を残している。このJavascriptの癖を教えてください私が知っている

  • typeof nameディスプレイstringの代わりをリストArray
  • :文字列の配列が、あることの可変印刷文字列の代わりに
  • name.length
  • 13代わりに予想されるように配列["what", "the", "...?"]を返しname = name.split(',')3
  • 書き込みが、nameあるアレイは

nameが唯一ではない配列、依然としてstringでありますこのような振る舞いをするような変数名、または少なくとも私は別のものを見つけることができませんでした。

これは単なるコンソールの気まぐれ、JavaScriptエンジンのバグ、または何ですか?

注:上記はChromeとFirefoxで発生します。 IE Edgeは予想外に動作します(typeof nameArrayです)。他のブラウザではテストされていません。

+1

'name'以外の変数名を使用してみてください。 https://developer.mozilla.org/en-US/docs/Web/API/Window/name – j08691

答えて

6

window.nameは、DOM内の文字列であるグローバルです。

あなたは関数スコープで変数を宣言することによって、それを回避することができます注意:IE /エッジが異なっている理由については

(function() { 
 
    var name = ['foo', 'bar']; 
 
    console.log(typeof name); 
 
})();

- スペックのその彼らの解釈とそうしました何年も前からそうだった。それを今変更することは大きな変化になるでしょう。

+1

Edgeではどうして起こらないのですか? – niceman

+0

@niceman彼らはキャスティングをしているかどうかによって異なります。 –

+0

うわー、ありがとう!それをチェックすることについて決して考えなかった! – Mtz

関連する問題