gpt4 book ai didi

javascript - 了解 Javascript : how it works, 中的 “undefined” 如何安全地检查它以及是否可以重新分配

转载 作者:数据小太阳 更新时间:2023-10-29 05:05:56 28 4
gpt4 key购买 nike

我一直在阅读 JavaScript 中的 undefined,现在我不确定我的理解是否正确。关于如何检查 undefined 有很多讨论,但不知何故我找不到任何提及对我来说似乎是理解 undefined 实际工作方式的基础的东西( undefined 是宿主对象的属性)。这就是这个问题的原因,我需要确认我理解的是正确的,如果我错了,我希望得到澄清。

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

window.undefined

此属性的值是 "undefined" 类型。这是与 ObjectStringNumberNull 一起的 JavaScript 类型之一。所以如果我这样做:

if(someVar===undefined) {}

我实际上是在检查 window.undefined 属性,不管它包含什么,对吗?

所以下面的代码会非常愚蠢,因为它只会根据字符串 "undefined" 检查 someVar,而不是 窗口的类型或属性 对象,对吧?

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

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

if(typeof someVar===undefined) {}

因此,总而言之,检查未定义的唯一正确且跨浏览器的方法是使用 typeof 例如:

if(typeof someVar==='undefined')

是这样吗?

同样在 ES5 中 window.undefined 不能被重新分配,但它在旧浏览器中是完全合法的,对吧?

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

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

如果我误解了 undefined 在 JavaScript 中的工作方式,我将不胜感激。

最佳答案

您几乎是正确的。除了这个:

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

javascript中有3个undefined。全局变量 undefined、值 undefined 和类型 undefined

即使覆盖了全局变量undefined,值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(在规范和文档中为 'Undefined' 但 typeof 返回 'undefined')并且类型 undefined 是仅对值 undefined 有效。

关于javascript - 了解 Javascript : how it works, 中的 “undefined” 如何安全地检查它以及是否可以重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624566/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com