未定义为参数,赋值目标

时间:2012-11-06 06:58:28

标签: javascript undefined

基本上有两个问题,都与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;

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在第一种情况下,您没有在全局对象上定义键'abc',因此您在尝试访问它时遇到引用错误。它类似于ruby和python中的'Name error',表示标识符为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 yeilds做同样的事情:

>> typeof NaN
"number"
>> NaN = 'a'
"a"
>> 0 === NaN
false
>> 'a' === NaN
false
>> typeof NaN
"number"
>> NaN
NaN