我已经使用JavaScript几年了,从不关心null
& undefined
之前,我总是使用undefined
来验证对象的存在。
但最近我来了this article。他们在这里说
JavaScript区分null,它是'object'类型的对象,表示故意的非值; undefined,是'undefined'类型的对象,表示未初始化的值 - 也就是说,值hasn'甚至还被分配了。我们稍后将讨论变量,但在JavaScript中,可以声明变量而不为其赋值。如果这样做,变量的类型是未定义的。
我现在完全糊涂了,这里究竟是什么非价值。此非值与undefined
的区别。 javascript返回的情况是null
。
我试过以下示例
var sam;
alert(sam); // returns undefined
和
try {
//var sam;
alert(sam);
} catch(ex) { } // exception says: sam is undefined
我不确定js何时返回null。有人可以澄清我。
答案 0 :(得分:14)
警报(SAM); //返回undefined
不,这是一个例外。
访问未设置的属性时,您会获得undefined
;直接使用未设置的名称时会出现错误。
全局变量很有意思,因为可以使用简单的变量名称或使用window
全局对象的属性来访问它们:
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // false
alert(sam); // ERROR
如果声明sam
但未初始化,则访问window.sam
仍会获得undefined
,但由于其他原因:window
对象中有一个条目{ {1}},但它指向与访问不存在的属性时相同的sam
对象。
undefined
这当然是令人困惑的血腥混乱; var sam;
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // ** true
alert(sam); // ** undefined
是JavaScript语言设计中最严重的错误之一。
undefined
很好,与其他语言中的null / nil / void / None值非常相似。它没有涉及上述任何一种。
答案 1 :(得分:2)
<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>
答案 2 :(得分:2)
要使变量接收空值,必须分配它。 null
用于表示未知或不关心的值。另一方面,undefined
旨在表明被访问的属性从未被赋予一个值。这与null
不同。
null
有人故意说“我不知道它应该具有什么价值”或“我不在乎现在的价值”。 undefined
中的其他人真的说“你确定你应该使用它尚未分配的值”。
答案 3 :(得分:1)
我区分它们的方式未定义为“我没有定义此值”,并且null为“我已定义此值,但我不知道或无法弄清楚该值应该是什么。”