首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果'window.undefined‘被覆盖,则获取'undefined’

如果'window.undefined‘被覆盖,则获取'undefined’
EN

Stack Overflow用户
提问于 2011-02-17 03:26:42
回答 4查看 2.5K关注 0票数 11

看起来window.undefined是可写的,也就是说,可以将它设置为默认值之外的其他值(这并不奇怪,就是undefined)。

然而,问题是,每当我提到undefined时,它都指的是window.undefined (因为在这种情况下,window可以被删除)。

那么,我如何才能真正访问undefined“实例”呢?如果window.undefined已经更改,我如何能够将另一个变量设置为undefined

如果我编码:

代码语言:javascript
运行
复制
window.undefined = 'foo'; // This code might have been executed by someone/something
var blah = undefined; // blah is not undefined, but equals to 'foo' instead...

我怎么可能解决这个问题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-17 03:35:23

这个问题的“标准”解决方案是使用内置的void运算符。它的唯一目的是返回未定义的:

代码语言:javascript
运行
复制
var my_undefined = void 0;

除此之外,还有其他获取undefined的方法

如果你不return任何东西,函数会返回undefined,所以你可以这样做

代码语言:javascript
运行
复制
this_is_undefined = (function(){}());

如果你没有向一个函数传递足够的参数,你也会变得没有定义。所以一个常见的习语是

代码语言:javascript
运行
复制
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`.

当您同时定义和调用函数时,这种类型尤其适用,这样您就不会有忘记和传递错误数量的参数的风险。

票数 18
EN

Stack Overflow用户

发布于 2011-02-17 03:42:22

除了其他解决方案之外,您还可以使用void 0技巧,该技巧始终返回undefined,而不考虑window属性。

代码语言:javascript
运行
复制
window.undefined = 'foo';
var blah = void 0;

alert( blah );  // undefined
票数 17
EN

Stack Overflow用户

发布于 2011-02-17 03:38:38

实际上,将任何东西与undefined进行比较根本不是一个好主意。应该改用typeof运算符:

代码语言:javascript
运行
复制
function isUndefined ( variant ) { return typeof variant === 'undefined' }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5021133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档