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

时间:2013-09-25 08:40:18

标签: javascript undefined

如您所见,undefined不是javascript中的关键字(是不是?)。所以我们可以将它用作变量虽然我确定这是一个坏主意。现在我的问题是为什么我不能给未定义的值。

代码:

var undefined=3;

undefined;//still undefined  

任何建议都会感激不尽。

3 个答案:

答案 0 :(得分:2)

因为在较旧的环境中(在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 == null但是undefined !== null),所以我建议使用严格相等运算符(===),仅检查 undefined

答案 1 :(得分:1)

有关如何在JavaScript中使用“未定义”的完整说明(我不是作者)http://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/

  

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

     

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

     

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

     

undefined(value)是一个原语,是唯一的值   未定义的类型。任何尚未赋值的属性,   假定未定义的值。 (ECMA 4.3.9和4.3.10)。一个功能   没有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强制执行此操作。)

答案 2 :(得分:1)

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