1

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

代码:

var undefined=3;

undefined;//still undefined  

任何建议将不胜感激。

4

3 回答 3

2

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

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

请注意,调用了一个参数,并且在没有任何参数undefined的情况下调用了 IIFE ,这使得它实际上变成了. 在较新的环境中,无法更改 undefined 的值,但为了向后兼容,它还被大量使用。undefinedundefined

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

请记住, undefinedundeclared之间存在细微差别:

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 == null但是undefined !== null),所以我建议使用严格相等运算符(===),它只 undefined检查。

于 2013-09-25T08:44:49.757 回答
1

根据MDN,从 JavaScript 1.8.5 开始, undefined 变得不可写。这表明在此之前将其用作变量是完全“合法的”。
但这显然不是一个好主意。

于 2013-09-25T08:46:26.500 回答
1

请参阅此处http://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/如何在 JavaScript 中使用“未定义”的完整解释(我不是作者)

与其他语言相比,JavaScript 的 undefined 概念有点混乱。特别是,试图理解 ReferenceErrors(“x 未定义”)以及如何最好地针对它们进行编码可能会令人沮丧。

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

Undefined (type) 是一个内置的 JavaScript 类型。

undefined (value) 是一个原始类型,是 Undefined 类型的唯一值。任何尚未分配值的属性都假定为未定义的值。(ECMA 4.3.9 和 4.3.10)。没有 return 语句的函数或带有空 return 语句的函数返回 undefined。未提供的函数参数的值未定义。

undefined (variable) 是一个全局属性,其初始值为 undefined (value),由于它是一个全局属性,我们也可以将其作为变量访问。

从 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 强制执行此操作)。

于 2013-09-25T08:44:04.427 回答