我使用JavaScript已经有几年了,以前我从来不关心null
和undefined
之间的区别,我总是使用undefined
来验证对象的存在。
但最近我是通过this article来的。他们在这里说
JavaScript区分了null和undefined,前者是一个' object‘类型的对象,表示有意的非值,后者是一个'undefined’类型的对象,表示一个未初始化的值-也就是说,一个值还没有被赋值。我们稍后会讨论变量,但是在JavaScript中,可以声明一个变量而不给它赋值。如果这样做,变量的类型是未定义的。
我现在完全迷惑了,这里到底什么是无价值的。这个非值与undefined
有何不同。什么情况下javascript返回null
。
我已经试过下面的样品了
var sam;
alert(sam); // returns undefined
和
try {
//var sam;
alert(sam);
} catch(ex) { } // exception says: sam is undefined
我不确定js什么时候返回null。有没有人能告诉我。
发布于 2009-10-13 12:52:17
警报(Sam);//返回未定义
不,那是个例外。
当您访问未设置的属性时,会得到undefined
;当您直接使用未设置的名称时,会得到一个错误。
全局变量很有趣,因为可以使用简单的变量名或使用window
全局对象的属性来访问它们:
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // false
alert(sam); // ERROR
如果sam
已声明但未初始化,则访问window.sam
仍然会获得undefined
,但原因不同:window
对象中有一个用于sam
的条目,但它指向的undefined
对象与您访问不存在的属性时获得的相同。
var sam;
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // ** true
alert(sam); // ** undefined
这当然是一个令人困惑的烂摊子;undefined
是JavaScript语言设计中最严重的错误之一。
另一方面,null
很好,其工作方式与其他语言中的null/nil/void/None值基本相同。它不属于上述任何一种情况。
发布于 2009-10-13 12:54:21
<script type="text/javascript">
// variable with an unasigned value
var a;
if (a == undefined) {
alert('a is undefined');
}
if (a == null) {
alert('a is undefined');
}
// this will produce an error
if (b == undefined) {
alert('b is undefined');
}
// this is the right way to handle not defined variables
if (typeof(c) == 'undefined') {
alert('c is blabla');
}
</script>
发布于 2009-10-13 12:55:37
要使变量接收空值,必须对其赋值。null
用于表示未知或不关心的值。另一方面,undefined
被设计用来指示被访问的属性从未被赋值。这不同于null
。
对于null
,一个人故意说“我还不知道这应该有什么价值”或“我现在不在乎这是什么价值”。undefined
中的OTH实际上是在问“你确定你应该使用这个值吗?它还没有被赋值”。
https://stackoverflow.com/questions/1559952
复制相似问题