我对Javascript undefined和null有点困惑。
null
通常的行为类似于其他脚本语言的带外“null”,“nil”或“None”对象的概念。
undefined
另一方面,这是一个奇怪的JavaScript怪癖。它是一个表示带外值的单例对象,本质上是第二个相似但不同的 。它出现:null
-
调用参数数少于语句列表中参数列表的函数时,未传递的参数将设置为 。你可以用例如:function
undefined
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
使用此方法,您无法区分 和 ; 两者中的值将相同。如果你需要分辨出区别,你可以看看,但是做这样的可选参数通常不是很可读。dosomething(1)
dosomething(1, undefined)
arg2
arguments.length
-
当函数没有 时,它返回 。通常不需要使用这样的返回结果。return value;
undefined
-
当您通过在块中包含语句来声明变量,但尚未为其赋值时,该变量为 。同样,你真的不需要依赖它。var a
undefined
-
当 spooky 运算符的操作数是不存在的简单变量时,将返回该运算符,而不是像尝试引用它时通常发生的那样引发错误。(您也可以给它一个用括号括起来的简单变量,但不能给它一个涉及不存在的变量的完整表达式。这也没有多大用处。typeof
'undefined'
-
这是有争议的。当您访问不存在的对象的属性时,您不会像其他所有语言一样立即收到错误。相反,你会得到一个对象。(然后,当你稍后尝试在脚本中使用该对象时,它会以一种奇怪的方式出错,这比JavaScript刚刚立即抛出错误要困难得多。undefined
undefined
这通常用于检查属性是否存在:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
但是,因为您可以像任何其他值一样进行赋值:undefined
o.prop= undefined;
这实际上并不能检测到该物业是否可靠地存在。最好使用运算符,它不在原始的Netscape版本的JavaScript中,但现在随处可用:in
if ('prop' in o)
...
总而言之,是一个特定于JavaScript的混乱,这让每个人都感到困惑。除了可选的函数参数,其中JS没有其他更优雅的机制,应该避免。它永远不应该成为语言的一部分; 对于(2)和(3)来说,它本来可以正常工作,而(4)是一个只存在的错误功能,因为JavaScript在开始时没有例外。undefined
undefined
null
实际上做了什么?它是测试未定义的和空的还是只是未定义的?if (!testvar)
这样的“真实性”检验针对 、、、 和空字符串进行检查。但在这种情况下,是的,它确实是它所关心的。IMO,它应该更明确地说明这一点,并说.false
undefined
null
0
NaN
undefined
if (testvar!==undefined)
一旦定义了一个变量,我是否可以将其清除回未定义(因此删除该变量)。
您当然可以分配给它,但这不会删除该变量。只有操作员才能真正移除东西。undefined
delete object.property
delete
实际上意味着属性而不是变量本身。浏览器会让你直接逃脱,但这不是一个好主意,在 ECMAScript Fifth Edition 的严格模式下也不起作用。如果你想释放对某物的引用,以便可以对其进行垃圾收集,那么更常见的说法是。delete variable
variable= null
我可以将未定义作为参数传递吗?
是的。