当JavaScript返回null并且未定义?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我几年来一直在使用JavaScript,并且从不关心nullundefined更早的区别,我总是undefined用来验证对象的存在。

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

JavaScript将区分null(它是指示故意的非值的'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何时返回空值。有人能澄清我吗?

提问于
用户回答回答于

警报(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对象中有一个条目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值非常相似。它不属于上述任何一种。

用户回答回答于
<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>

扫码关注云+社区