なぜundefined
はwith
の対象となりますが、null
はできません。また、let
はカバーできますが、var
はできません(エラーが発生します)。nullが許されない間、未定義はなぜでカバーできますか?
したがって、変数を再定義できるルールは何ですか?
var obj = {null:1,undefined:2};
with(obj) console.log(null,undefined);
なぜundefined
はwith
の対象となりますが、null
はできません。また、let
はカバーできますが、var
はできません(エラーが発生します)。nullが許されない間、未定義はなぜでカバーできますか?
したがって、変数を再定義できるルールは何ですか?
var obj = {null:1,undefined:2};
with(obj) console.log(null,undefined);
undefined
は、事前定義されたグローバル識別子であるが、null
はリテラルであるため。 var
はkeywordですが、let
は(緩いモードでは、strict modeにあります)ではないためです。 (ゆるいモードでは、表示される場所によってキーワードや識別子のように機能します)
undefined
はキーワードではなく、あらかじめ定義された理由を思い出しません。理由はlet
がstrictモードのキーワードにすぎないという理由は、言語が最初に定義されてから20年後の2015年に追加されたということです。
また、楽しいバグにつながる可能性がある未定義(ローカル)をオーバーライドすることができます:http://jsbin.com/sesisogico/edit?js,console – amcdrmtt
私は 'キーワードはありません。明らかに 'var let = 1'は有効なJavaScriptです。下位互換性を維持するためにこれが行われましたか? –
@Derek朕會功夫:そうですが、 'let'は緩いモードコードの識別子としてのみ許されていることに注意してください。 strictモードのコードでは、 'var let = 1'は失敗します。新しいキーワードは避けられないところでのみ追加され、理想的には文脈上のみです( 'await'は' async'関数内のキーワードだけです; async'は全くキーワードではありません;文法的に適切な場所)、そして影響の範囲を決定するために野生のコードの広範な研究の後でなければなりません。 –
ここにコードを記入してください。他の賢明な私たちはあなたを助けることはできません.. –