Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未定义为参数,分配的目标_Javascript_Undefined - Fatal编程技术网

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 Infrasgistics
NaN
是一个变量,就像它原来是
未定义的
。它保存一个数值类型的值
NaN