2017-11-16 5 views
3

なぜundefinedwithの対象となりますが、nullはできません。また、letはカバーできますが、varはできません(エラーが発生します)。nullが許されない間、未定義はなぜでカバーできますか?

したがって、変数を再定義できるルールは何ですか?

enter image description here

var obj = {null:1,undefined:2}; 
 
with(obj) console.log(null,undefined);

+1

ここにコードを記入してください。他の賢明な私たちはあなたを助けることはできません.. –

答えて

2

undefinedは、事前定義されたグローバル識別子であるが、nullはリテラルであるため。 varkeywordですが、letは(緩いモードでは、strict modeにあります)ではないためです。 (ゆるいモードでは、表示される場所によってキーワードや識別子のように機能します)

undefinedはキーワードではなく、あらかじめ定義された理由を思い出しません。理由はletがstrictモードのキーワードにすぎないという理由は、言語が最初に定義されてから20年後の2015年に追加されたということです。

+0

また、楽しいバグにつながる可能性がある未定義(ローカル)をオーバーライドすることができます:http://jsbin.com/sesisogico/edit?js,console – amcdrmtt

+1

私は 'キーワードはありません。明らかに 'var let = 1'は有効なJavaScriptです。下位互換性を維持するためにこれが行われましたか? –

+3

@Derek朕會功夫:そうですが、 'let'は緩いモードコードの識別子としてのみ許されていることに注意してください。 strictモードのコードでは、 'var let = 1'は失敗します。新しいキーワードは避けられないところでのみ追加され、理想的には文脈上のみです( 'await'は' async'関数内のキーワードだけです; async'は全くキーワードではありません;文法的に適切な場所)、そして影響の範囲を決定するために野生のコードの広範な研究の後でなければなりません。 –

関連する問題