Javascript 未定义为参数,分配的目标
基本上有两个问题,都与Javascript 未定义为参数,分配的目标,javascript,undefined,Javascript,Undefined,基本上有两个问题,都与undefined的行为有关 Q1为什么这会失败并出现参考错误: function hello(a){ return true; } //var abc = undefined; hello(abc); 但这并不是: function hello(a){ return true; } var abc = undefined; hello(abc); 问题2:为什么这是一项有效的任务: undefined =
undefined
的行为有关
Q1为什么这会失败并出现参考错误:
function hello(a){
return true;
}
//var abc = undefined;
hello(abc);
但这并不是:
function hello(a){
return true;
}
var abc = undefined;
hello(abc);
问题2:为什么这是一项有效的任务:
undefined = 10;
但这些都不是:
null = 10;
"hello" = 10;
10 = 10;
谢谢您的帮助。在第一种情况下,您没有在全局对象上定义键
'abc'
,因此您在尝试访问它时遇到了引用错误。在ruby和python中,它类似于“Name error”
,表示标识符是未定义的
这两个是等效的,它们都定义了全局对象上的'abc'
键,在您的示例中,这是窗口
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
此外,“未定义”不是基元。虽然0
,“字符串”
是原语null
是注释中指出的一个特殊的单例对象。这些不是标识符,而是实际值,因此不能按规范分配给它们
关于NaN的更新:
NaN略有不同,因为它是一个基本(数字)。尝试对NaN yeilds执行相同的操作:
>> typeof NaN
"number"
>> NaN = 'a'
"a"
>> 0 === NaN
false
>> 'a' === NaN
false
>> typeof NaN
"number"
>> NaN
NaN
因为undefined
是一个特殊的variable@zerkms它不是一个像null
、整数等的原语吗?不,它是一个预定义的变量-窗口。未定义的是一个值为未定义的的变量。也很有趣(也许):.“null”不是一个实际的原语,而是一个特殊的“singleton对象”@SeanKinsey感谢肖恩的更正。我知道这是一个物体,但我没有检查规格。我的错,我会纠正它。它本来是作为一个原语,但后来错误地变成了一个对象(如在typeof返回“object”中):/@SeanKinsey所有有趣的东西,比如typeof NaN是一个数字。@KonstantinD InfrasgisticsNaN
是一个变量,就像它原来是未定义的。它保存一个数值类型的值NaN
。