如何检查变量或对象是否未定义?

6
我一直以为可以通过将未定义的变量与undefined进行比较来检查,但是我在chrome控制台中得到了以下错误:

enter image description here

那么我如何检查jQuery对象是否未定义?

编辑:

enter image description here

if(jQuery)也会给我带来问题。

编辑:

解决方案:

if(window.jQuery)有效。 typeof(jQuery) == 'undefined' 也可以。

有人能解释一下原因吗?


请返回仅翻译的文本:[https://dev59.com/t17Va4cB1Zd3GeqPI1vq#8531076][1] - Eric Yin
https://dev59.com/PnVD5IYBdhLWcg3wTJrF, https://dev59.com/t17Va4cB1Zd3GeqPI1vq - user166390
7个回答

9
有几种解决方法:
  1. 使用 typeof。它是一个特殊操作符,永远不会导致 ReferenceError。它对于值为 undefined 的情况和在上下文中不存在的变量都求值为 "undefined"。我不太喜欢它,但它似乎非常常见。

  2. 使用 window.jQuery。这会强制进行 "属性查找":属性查找从不失败,并在该属性不存在时返回 undefined。我曾经在一些框架中看到过它的使用。缺点是假定了一个上下文(通常是 window)。

  3. 确保变量已经 "声明":var jQuery; if (jQuery) { /* yay */ }。似乎并不常见,但完全有效。请注意,var 只是一个注释,并被提升。在全局上下文中,这将创建 "jQuery" 属性。

  4. 捕获 ReferenceError。老实说,我从未见过这种情况,也不建议这样做,但它应该是可行的。

愉快地编码吧。

5

流程1:

if (jQuery) {  
    // jQuery is loaded  
} else {
    // jQuery is not loaded
}

步骤2:

if (typeof jQuery == 'undefined') {  
    // jQuery is not loaded  
} else {
    // jQuery is loaded
}

1
不行,这可能会抛出一个ReferenceError,就像帖子中所显示的那样。 - user166390
这里使用“Process #2”是安全/正确的。通常我只看到===typeof一起使用,但这看起来是有效的。 - user166390

3

From here

if(typeof jQuery == "undefined") { 
  document.write("undefined"); 
}else{ 
   document.write("Exists"); 
} 

虽然这个方法“作弊”了,因为使用了 var test=1,所以上下文并不相同 :) 但是即使没有它,在这种情况下仍然是有效的。 - user166390

2
据我所知,您可以做到:
if(typeof X == 'undefined')

但是你可能想要查看资源加载器。之前给出的答案也是正确的。


1
你的代码中所调用的变量名为“jQuery”的变量从未被声明,因此会抛出类似于“xxx(变量名)未定义”的错误。
你可以使用typeof运算符来检查一个变量是否已经被定义。
if (typeof(jQuery) == "undefined")

1

-1

if(jQuery) 应该就足够了,不是吗?


不行。这可能会抛出一个ReferenceError(即上述内容在帖子中)。 - user166390

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接