当JavaScript返回null&未定义?

时间:2009-10-13 12:38:43

标签: javascript null undefined

我已经使用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。有人可以澄清我。

4 个答案:

答案 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为“我已定义此值,但我不知道或无法弄清楚该值应该是什么。”