如您所见,undefined不是javascript中的关键字(是不是?)。所以我们可以将它用作变量虽然我确定这是一个坏主意。现在我的问题是为什么我不能给未定义的值。
代码:
var undefined=3;
undefined;//still undefined
任何建议都会感激不尽。
答案 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开始。 这使得在此之前将其用作变量是完全“合法的” 但这显然不是一个好主意。