想要了解更多关于未定义的信息

Want To Know More About Undefined

本文关键字:未定义 信息 了解      更新时间:2023-09-26

如您所见,undefined在javascript中不是关键字(对吗?(。因此,我们可以将其用作变量,尽管我确信这是一个坏主意。现在我的问题是为什么我不能给未定义一个值。

法典:

var undefined=3;
undefined;//still undefined  

任何建议将不胜感激。

因为在较旧的环境中(在 JS 1.8.5 之前(,可以更改 undefined 的值,并且检查不存在的内容是以可能破坏的方式进行的。在自己的闭包中开发库是一种常见的选择,使用 IIFE 模式创建一个未定义的变量,该变量不受外部代码(例如 jQuery 和大多数库(的接触,这是一个示例:

(function(undefined) {
    //code which safely uses undefined
})();

请注意,有一个名为 undefined 的参数,并且在没有任何参数的情况下调用 IIFE,从而使该undefined有效地变得undefined。在较新的环境中,不可能更改未定义的值,但为了逆向兼容性,它已被大量使用。

然而,检查未定义类型的最安全方法是使用 typeof 。事实上,它的用法不能以任何方式被覆盖,它可以安全地使用:typeof foo == 'undefined' .

请记住,未定义未声明之间存在细微差异:

var x; //declared but undefined
x === undefined; //true

但是在较旧的环境中,您可以做到

var undefined = 1;
var x; //declared, of type undefined, but...
x === undefined // false, because undefined is 1 and x is of type undefined

正如我之前所说,检查未定义变量(确保它在旧环境中工作(的最安全方法是使用 typeof:

var undefined = 1;
var x;
typeof x == 'undefined'; //true

还要记住,将相等性检查( == ( 与 undefined 一起使用也会检查null(实际上,undefined == nullundefined !== null(,所以我建议使用严格的相等运算符( === (,它检查undefined

根据 MDN 的说法,从 JavaScript 1.8.5 开始,undefined 变成了不可写的。这意味着在此之前将其用作变量是完全"合法的"。
但这显然不是一个好主意。

在此处查看有关如何在 JavaScript 中使用"undefined"的完整解释(我不是作者 http://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/

与其他语言相比,JavaScript 的 undefined 概念是一个 有点混乱。特别是,试图理解引用错误 ("x 未定义"(以及如何最好地针对它们进行编码 令人 沮丧。

在 JavaScript 中,有 Undefined(类型(、undefined(值(和 未定义(变量(。

Undefined(类型(是一种内置的JavaScript类型。

未定义(值(是一个基元,是 未定义的类型。尚未分配值的任何属性, 假定未定义的值。(ECMA 4.3.9和4.3.10(。一个函数 没有 return 语句,或带有空返回的函数 语句返回未定义。未提供函数的值 参数未定义。

未定义(变量(是一个全局属性,其初始值为 undefined(值(,因为它是一个全局属性,我们也可以访问它 作为变量。

从 ECMA 3 开始,可以重新分配其值:

undefined = "washing machine"; //assign a string to undefined (variable)
typeof undefined //"string"
f = undefined;
typeof f; //"string"
f; //"washing machine"

不用说,将值重新分配给未定义的变量是非常 不良做法,事实上 ECMA 5 不允许这样做(尽管其中 当前的完整浏览器版本集,只有 Safari 强制执行(。