首页 > JavaScript > 如何检查 JavaScript 中是否存在变量?

如何检查 JavaScript 中是否存在变量?

上一篇 下一篇

如何检查 JavaScript 中是否存在变量?

测试变量在 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=== undefinedtypeof

分割线

网友回答:

如果您有兴趣找出变量是否已声明而不管其值如何,那么使用运算符是最安全的方法。请考虑以下示例: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

如果你有兴趣知道变量是否尚未声明或具有值,请使用运算符,它保证返回一个字符串:undefinedtypeof

if (typeof myVar !== 'undefined')

直接比较很麻烦,因为可以覆盖。undefinedundefined

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 的大规模采用而变得无关紧要。另一个,可以用来检查未声明变量的类型,总是利基。因此,我现在建议在大多数情况下使用直接比较:typeofundefinedtypeof

myVariable === undefined

2010年的原始答案

使用是我的偏好。当变量从未被声明时,它将起作用,这与使用 . 或运算符或类型强制的任何比较不同。(与 不同,在 ECMAScript 3 环境中也可以重新定义,这使得它不可靠,尽管现在几乎所有常见环境都符合 ECMAScript 5 或更高版本)。typeof=====ifundefinednull

if (typeof someUndeclaredVariable == "undefined") {
    // Works
}

if (someUndeclaredVariable === undefined) { 
    // Throws an error
}

模板简介:该模板名称为【如何检查 JavaScript 中是否存在变量?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 216次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-26
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
自适应 微信模板 html5 企业网站 微信公众平台 微信素材 微信图片 微信文章 单页式简历模板 响应式
您可能会喜欢的其他模板