测试变量在 JavaScript 中是否未定义的最合适方法是什么?
我已经看到了几种可能的方法:
if (window.myVariable)
或
if (typeof(myVariable) != "undefined")
或
if (myVariable) // This throws an error if undefined. Should this be in Try/Catch?
网友回答:
我个人使用
myVar === undefined
警告:请注意,已使用并且之前已声明(未定义)。===
==
myVar
我不喜欢.我认为这是冗长的和不必要的。(我可以在更少的代码中完成相同的工作。typeof myVar === "undefined"
现在有些人读到这里会痛苦地嘶吼着:“等等!瓦伊特!!! 可以重新定义!undefined
凉。我知道这一点。再说一次,Javascript中的大多数变量都可以重新定义。是否永远不要使用任何可以重新定义的内置标识符?
如果你遵循这个规则,对你有好处:你不是一个伪君子。
问题是,为了在JS中做很多实际工作,开发人员需要依靠可重新定义的标识符来成为它们的样子。我没有听到人们告诉我我不应该使用,因为有人可以setTimeout
window.setTimeout = function () {
alert("Got you now!");
};
底线,不使用原始的“它可以重新定义”的论点是假的。=== undefined
(如果你仍然害怕被重新定义,为什么你盲目地将未经测试的库代码集成到你的代码库中?甚至更简单:一个棉绒工具。undefined
此外,与该方法一样,此技术可以“检测”未声明的变量:typeof
if (window.someVar === undefined) {
doSomething();
}
但这两种技术都在抽象中泄漏。我敦促你不要使用它,甚至
if (typeof myVar !== "undefined") {
doSomething();
}
考虑:
var iAmUndefined;
要捕获该变量是否已声明,您可能需要求助于运算符。(在许多情况下,您可以简单地读取代码O_o)。in
if ("myVar" in window) {
doSomething();
}
但是等等!还有更多!如果一些原型链魔法正在发生怎么办…?现在即使是优越的操作员也是不够的。(好的,我在这里完成了这部分,只是说在 99% 的情况下,(和****咳嗽****)工作得很好。如果你真的关心,你可以自己阅读这个主题。in
=== undefined
typeof
网友回答:
如果您有兴趣找出变量是否已声明而不管其值如何,那么使用运算符是最安全的方法。请考虑以下示例:in
// global scope
var theFu; // theFu has been declared, but its value is undefined
typeof theFu; // "undefined"
但在某些情况下,这可能不是预期的结果,因为变量或属性已声明但未初始化。使用运算符进行更可靠的检查。in
"theFu" in window; // true
"theFoo" in window; // false
如果你有兴趣知道变量是否尚未声明或具有值,请使用运算符,它保证返回一个字符串:undefined
typeof
if (typeof myVar !== 'undefined')
直接比较很麻烦,因为可以覆盖。undefined
undefined
window.undefined = "foo";
"foo" == undefined // true
正如@CMS所指出的,这已经在 ECMAScript 第 5 版中进行了修补,并且是不可写的。undefined
if (window.myVar)
还将包括这些 falsy 值,因此它不是很健壮:
false 0 "" NaN null undefined
感谢@CMS指出您的第三种情况 – 也可能在两种情况下抛出错误。第一种是当变量尚未定义时,它会抛出 .if (myVariable)
ReferenceError
// abc was never declared.
if (abc) {
// ReferenceError: abc is not defined
}
另一种情况是当变量已定义,但有一个 getter 函数,该函数在调用时会抛出错误。例如
// or it's a property that can throw an error
Object.defineProperty(window, "myVariable", {
get: function() { throw new Error("W00t?"); },
set: undefined
});
if (myVariable) {
// Error: W00t?
}
网友回答:
2020 更新
我更喜欢检查(即可以重新定义)的原因之一,随着 ECMAScript 5 的大规模采用而变得无关紧要。另一个,可以用来检查未声明变量的类型,总是利基。因此,我现在建议在大多数情况下使用直接比较:typeof
undefined
typeof
myVariable === undefined
2010年的原始答案
使用是我的偏好。当变量从未被声明时,它将起作用,这与使用 . 或运算符或类型强制的任何比较不同。(与 不同,在 ECMAScript 3 环境中也可以重新定义,这使得它不可靠,尽管现在几乎所有常见环境都符合 ECMAScript 5 或更高版本)。typeof
==
===
if
undefined
null
if (typeof someUndeclaredVariable == "undefined") {
// Works
}
if (someUndeclaredVariable === undefined) {
// Throws an error
}
模板简介:该模板名称为【如何检查 JavaScript 中是否存在变量?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。