如何检查JavaScript中的“未定义”?

如何检查JavaScript中的“未定义”?

什么是测试变量是否在JavaScript中未定义的最合适的方法?我看到了几种可能的方法:

if (window.myVariable)

if (typeof(myVariable) != "undefined")

if (myVariable) //This throws an error if undefined. Should this be in Try/Catch?


智慧大石
浏览 432回答 3
3回答

慕工程0101907

如果您有兴趣找出一个变量是否已经声明,而不管它的值如何,那么使用in接线员是最安全的路。以这个例子为例。// global scopevar theFu; // theFu has been declared, but its value is undefinedtypeof theFu; // "undefined"但这可能不是某些情况下的预期结果,因为变量或属性是声明的,只是没有初始化。使用in操作人员进行更健壮的检查。"theFu" in window; // true"theFoo" in window; // false如果您有兴趣知道变量是未声明的还是有此值的undefined,然后使用typeof接线员。if (typeof myVar !== 'undefined')这个typeof运算符保证返回字符串。直接比较undefined令人烦恼undefined可以被覆盖。window.undefined = "omg";"omg" == undefined // true正如@CMS所指出的,这已经在ECMAScript第5版中进行了修补。undefined是不可写的。if (window.myVar)还将包括这些虚假的值,因此它不太可靠: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 errorObject.defineProperty(window, "myVariable", {      get: function() { throw new Error("W00t?"); },      set: undefined });if (myVariable) {     // Error: W00t?}

弑天下

我个人用myVar === undefined警告:请注意===用在==而那myVar以前申报(不是定义).我不喜欢typeof myVar === "undefined"..我认为这是冗长和不必要的。(我可以用更少的代码完成同样的工作。)现在有些人读到这篇文章时,会痛苦地倒在地上,尖叫着:“等等!哇!undefined可以重新定义!“凉爽的。我知道这个。然后,Javascript中的大多数变量都可以重新定义。您不应该使用任何可以重新定义的内置标识符吗?如果你遵循这条规则,那对你有好处:你不是一个伪君子。问题是,为了在JS中完成大量的实际工作,开发人员需要依赖可重新定义的标识符来实现它们。我没听人说我不应该用setTimeout因为有人可以window.setTimeout = function () {     alert("Got you now!");};说到底,“它可以重新定义”参数不使用RAW。=== undefined是假的。(如果你仍然害怕undefined重新定义后,为什么要盲目地将未经测试的库代码集成到代码库中?或者更简单:一种衬里工具。)还有,就像typeof方法,这种技术可以“检测”未声明的变量:if (window.someVar === undefined) {     doSomething();}但这两种技术在抽象上都有漏洞。我劝你不要用这个甚至if (typeof myVar !== "undefined") {     doSomething();}考虑:var iAmUndefined;若要捕获该变量是否已声明,您可能需要使用in接线员。(在许多情况下,您可以简单地读取代码O_o)。if ("myVar" in window) {     doSomething();}但是等等!还有更多!如果一些原型链魔法发生了,…?现在连上级in操作员是不够的。(好吧,这部分我已经讲完了,除了说99%的时间,=== undefined(*咳嗽*)typeof)工作得很好。如果你真的关心这个问题,你可以自己读到。)

阿波罗的战车

使用typeof是我的首选。当变量从未被声明时,它将工作,不像与==或===运算符或类型强制使用if. (undefined,不像null,也可以在ECMAScript 3环境中重新定义,这使得比较起来它不可靠,尽管现在几乎所有公共环境都兼容ECMAScript 5或更高版本)。if (typeof someUndeclaredVariable == "undefined") {     // Works}if (someUndeclaredVariable === undefined) {      // Throws an error}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript