理解Javascript中的“未定义”:它是如何工作的,如何安全地检查它以及是否可以重新分配

前端之家收集整理的这篇文章主要介绍了理解Javascript中的“未定义”:它是如何工作的,如何安全地检查它以及是否可以重新分配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在阅读 JavaScript中未定义的内容,现在我不确定我的理解是否正确.有很多关于如何检查未定义的讨论,但不知怎的,我找不到任何提及的东西对我来说似乎是理解未定义实际如何工作的基础(未定义为宿主对象上的属性).这就是这个问题的原因,我需要确认我理解的是正确的,如果我错了,我会很感激澄清.

好的,首先,undefined是主机对象(浏览器中的窗口)的属性,因此使用它是完全合法的:

window.undefined

属性的值为“undefined”类型.这是JavaScript类型之一以及Object,String,Number和Null.所以,如果我这样做:

if(someVar===undefined) {}

我实际上正在检查window.undefined属性,无论它包含什么,是吗?

所以这下面的代码会非常愚蠢,因为这会检查someVar只针对字符串“undefined”,而不是窗口对象的类型和属性,对吧?

if(someVar==='undefined') {}

下面这也是不正确的,因为这将检查window.undefined属性(无论它包含什么):

if(typeof someVar===undefined) {}

因此,总结一下,检查undefined的唯一正确和跨浏览器的方法是使用typeof例如:

if(typeof someVar==='undefined')

是对的吗?

同样在ES5 window.undefined中无法重新分配,但它在旧浏览器中完全合法吗?

然而,如果我的理解是正确的,这仍然可以做到并且是邪恶的:

(function() { 
  var undefined=66;
  alert(undefined);
})()

如果我误解了JavaScript中的undefined是如何工作的,我将不胜感激.

解决方法

你几乎是正确的.除此之外:

The value of [window.undefined] is type “undefined”. This is one of Javascriupt types along with Object,Number,and Null

在javascript中有3个未定义.全局变量未定义,值未定义且类型未定义.

即使覆盖了全局变量undefined,仍然存在未定义的值.有几种方法可以获得它,其中一种是函数的空参数,另一种是变量声明而不分配任何东西:

// Note: Probably need older browsers to assign to undefined:
window.undefined = 1;

(function(foo){ // the value of foo is undefined;
    var bar;    // the value of bar is undefined;

    return [foo === bar,foo === window.undefined]; // returns [true,false]
})();

请注意,在上面的示例中,我们检查的是值,而不是类型.是===检查类型和值但是如果用==替换==结果将是相同的.

undefined值的类型为undefined(规范和文档中的’未定义’,但typeof返回’undefined’),类型undefined仅对undefined值有效.

猜你在找的JavaScript相关文章