18

我已经使用 JavaScript 好几年了,从不关心null&undefined之前的区别,我总是用它undefined来验证对象的存在。

但最近我通过这篇文章。他们在这里说

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何时返回空值。有人可以澄清我。

4

4 回答 4

14

警报(山姆);// 返回未定义

不,那是个例外。

undefined当您访问未设置的属性时,您会得到;直接使用未设置的名称时会出现错误。

全局变量很有趣,因为可以使用简单的变量名或使用window全局对象的属性来访问它们:

alert(window.sam);      // undefined
alert(window['sam']);   // undefined
alert('sam' in window); // false
alert(sam);             // ERROR

如果sam已声明但未初始化,访问window.sam仍然会得到 you undefined,但原因不同:对象中有一个条目windowfor 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-13T12:52:16.803 回答
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>
于 2009-10-13T12:54:21.107 回答
2

对于要接收空值的变量,必须对其进行赋值。 null用于表示未知或无关值。 undefined另一方面,旨在表明被访问的属性从未被赋值。这不同于null.

一个是故意说“我不知道这应该有null什么价值”或“我不在乎这现在是什么价值”。OTH inundefined真的是在说“你确定你应该使用这个尚未分配的值”。

于 2009-10-13T12:55:37.233 回答
1

我区分它们的方式是 undefined 是“我没有定义这个值”,而 null 是“我已经定义了这个值,但我不知道或无法弄清楚该值应该是什么”。

于 2009-10-13T12:54:36.410 回答