看起来window.undefined
是可写的,也就是说,可以将它设置为默认值之外的其他值(这并不奇怪,就是undefined
)。
然而,问题是,每当我提到undefined
时,它都指的是window.undefined
(因为在这种情况下,window
可以被删除)。
那么,我如何才能真正访问undefined
“实例”呢?如果window.undefined
已经更改,我如何能够将另一个变量设置为undefined
?
如果我编码:
window.undefined = 'foo'; // This code might have been executed by someone/something
var blah = undefined; // blah is not undefined, but equals to 'foo' instead...
我怎么可能解决这个问题呢?
发布于 2011-02-17 03:35:23
这个问题的“标准”解决方案是使用内置的void
运算符。它的唯一目的是返回未定义的:
var my_undefined = void 0;
除此之外,还有其他获取undefined
的方法
如果你不return
任何东西,函数会返回undefined,所以你可以这样做
this_is_undefined = (function(){}());
如果你没有向一个函数传递足够的参数,你也会变得没有定义。所以一个常见的习语是
function foo(arg1, arg2, undefined){ //undefined is the last argument
//Use `undefined` here without worrying.
//It is a local variable so no one else can overwrite it
}
foo(arg1, arg2);
//since you didn't pass the 3rd argument,
//the local variable `undefined` in foo is set to the real `undefined`.
当您同时定义和调用函数时,这种类型尤其适用,这样您就不会有忘记和传递错误数量的参数的风险。
发布于 2011-02-17 03:42:22
除了其他解决方案之外,您还可以使用void 0
技巧,该技巧始终返回undefined
,而不考虑window
属性。
window.undefined = 'foo';
var blah = void 0;
alert( blah ); // undefined
发布于 2011-02-17 03:38:38
实际上,将任何东西与undefined
进行比较根本不是一个好主意。应该改用typeof
运算符:
function isUndefined ( variant ) { return typeof variant === 'undefined' }
https://stackoverflow.com/questions/5021133
复制相似问题