最初のケースでは、グローバル オブジェクトでキーを定義していない'abc'
ため、アクセスしようとすると参照エラーが発生します。ruby'Name error'
や python で識別子がundefined
.
これら2つは同等であり、どちらも'abc'
グローバルオブジェクトのキーを定義します.あなたの場合、これはwindow
.
var abc = undefined;
var abc;
undefined を識別子として定義すると機能します。未定義の型ではなく window.undefined キーを定義します。この意味は:
undefined = 10;
var a;
alert(a); // Yeilds undefined
alert(window.undefined); // Yeilds 10
未定義のチェックを実行するには、識別子のタイプをチェックします。
if (typeof identifier === 'undefined') // Performs undefined check
なぜなら:
if (identifier === undefined) // Gives us unexpected results
// if undefined has been assigned to
さらに、 undefined はプリミティブではありません。一方0
、'string'
はプリミティブです。null
コメントで指摘されているように、特別なシングルトン オブジェクトです。これらは識別子ではなく実際の値であるため、仕様で割り当てることはできません。
NaN に関する更新:
NaN はプリミティブ (数値) であるため、わずかに異なります。NaN 利回りで同じことをしようとしています:
>> typeof NaN
"number"
>> NaN = 'a'
"a"
>> 0 === NaN
false
>> 'a' === NaN
false
>> typeof NaN
"number"
>> NaN
NaN