3

基本上是两个问题,都与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'在全局对象上定义键,因此您在尝试访问它时遇到了引用错误。就像'Name error'在 ruby​​ 和 python 中说标识符是undefined.

这两个是等价的,它们都定义了'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 回答