好的,首先,undefined是主机对象(浏览器中的窗口)的属性,因此使用它是完全合法的:
window.undefined
此属性的值为“undefined”类型.这是JavaScript类型之一以及Object,String,Number和Null.所以,如果我这样做:
if(someVar===undefined) {}
我实际上正在检查window.undefined属性,无论它包含什么,是吗?
所以这下面的代码会非常愚蠢,因为这会检查someVar只针对字符串“undefined”,而不是窗口对象的类型和属性,对吧?
if(someVar==='undefined') {}
下面这也是不正确的,因为这将检查window.undefined属性(无论它包含什么):
if(typeof someVar===undefined) {}
因此,总结一下,检查undefined的唯一正确和跨浏览器的方法是使用typeof例如:
if(typeof someVar==='undefined')
是对的吗?
同样在ES5 window.undefined中无法重新分配,但它在旧浏览器中完全合法吗?
然而,如果我的理解是正确的,这仍然可以做到并且是邪恶的:
(function() { var undefined=66; alert(undefined); })()
如果我误解了JavaScript中的undefined是如何工作的,我将不胜感激.
解决方法
The value of [window.undefined] is type “undefined”. This is one of Javascriupt types along with Object,Number,and Null
在javascript中有3个未定义.全局变量未定义,值未定义且类型未定义.
即使覆盖了全局变量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(规范和文档中的’未定义’,但typeof返回’undefined’),类型undefined仅对undefined值有效.