我对 JavaScript 有点困惑undefined
and null
values.
什么是if (!testvar)
实际上呢?它是否测试undefined
and null
要不就undefined
?
一旦定义了变量,我可以将其清除回undefined
(因此删除变量)?
我可以通过吗undefined
作为参数?例如。:
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
我对 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)
and dosomething(1, undefined)
; arg2
两者的值相同。如果您需要区分差异,可以查看arguments.length
,但是像这样执行可选参数通常不太可读。
-
当一个函数没有return value;
,它返回undefined
。一般不需要使用这样的返回结果。
-
当您通过具有var a
块中的语句,但尚未为其赋值,它是undefined
。再说一次,你不应该真的需要依赖它。
-
诡异的typeof
运算符返回'undefined'
当它的操作数是一个不存在的简单变量时,而不是像尝试引用它时通常会发生的那样抛出错误。 (您也可以给它一个用括号括起来的简单变量,但是not涉及不存在变量的完整表达式。)这也没有多大用处。
-
这是有争议的一点。当您访问不存在的对象的属性时,您不会像其他语言那样立即收到错误。相反,你会得到一个undefined
目的。 (然后当你尝试使用它时undefined
稍后在脚本中调用对象时,它会以一种奇怪的方式出错,这比 JavaScript 立即抛出错误更难以追踪。)
这通常用于检查属性是否存在:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
但是,因为您可以分配undefined
与任何其他值一样:
o.prop= undefined;
这实际上并不能检测该属性是否可靠地存在。更好地使用in
运算符,它不在 JavaScript 的原始 Netscape 版本中,但现在随处可用:
if ('prop' in o)
...
总之,undefined
这是 JavaScript 特有的混乱,让每个人都感到困惑。除了可选的函数参数之外,JS 没有其他更优雅的机制,undefined
应该避免。它不应该成为语言的一部分;null
对于(2)和(3)来说本来可以很好地工作,而(4)是一个错误特征,它的存在只是因为在开始时 JavaScript 没有例外。
什么是if (!testvar)
实际上呢?它测试未定义和空还是只是未定义?
这样的“真实性”测试会检查false
, undefined
, null
, 0
, NaN
和空字符串。但在这种情况下,是的,确实如此undefined
它涉及到。 IMO,应该更明确地说明这一点并说if (testvar!==undefined)
.
一旦定义了变量,我可以将其清除回未定义(因此删除该变量)。
你当然可以分配undefined
到它,但这不会删除变量。只有delete object.property
操作员确实删除了东西。
delete
实际上是针对属性而不是变量本身。浏览器会让你直接逃脱delete variable
,但这不是一个好主意,并且在 ECMAScript 第五版的严格模式下不起作用。如果你想释放对某些东西的引用,以便它可以被垃圾收集,更常见的说法是variable= null
.
我可以将 undefined 作为参数传递吗?
Yes.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)