3

基本的に 2 つの質問で、どちらも の動作に関するものですundefined

Q1 これが参照エラーで失敗するのはなぜですか:

function hello(a){
      return true;  
      }  
//var abc = undefined;
hello(abc);

しかし、これはしません:

function hello(a){
      return true;  
      }  
var abc = undefined;
hello(abc);

Q2 これが有効な割り当てである理由は次のとおりです。

undefined = 10;

しかし、これらはそうではありません:

null = 10;
"hello" = 10;
10 = 10;

ご協力いただきありがとうございます。

4

1 に答える 1

2

最初のケースでは、グローバル オブジェクトでキーを定義していない'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
于 2012-11-06T07:05:09.563 に答える