检查jQuery / Javascript中是否未定义

时间:2014-01-06 03:09:12

标签: javascript jquery

我有以下内容:

var currentQuestion = $(this).closest(".question")

我已尝试在thisthisthis问题中建议的所有内容:

if(currentQuestion !== undefined)
if(currentQuestion !== "undefined")
if(typeof currentQuestion !== undefined)
if(typeof currentQuestion !== "undefined")
if(currentQuestion !== null)
if(currentQuestion != undefined)
if(currentQuestion != "undefined")
if(currentQuestion.data("index") !== null)
if(currentQuestion.data("index") !== undefined)
if(typeof currentQuestion.data("index") !== undefined)

但它继续进入if语句......

我在if:

中有这个
console.log("nextQ: " + currentQuestion.data("index"));

nextQ: undefined正在打印

还有其他想法吗?

编辑:

currentQuestion.data("index") != null

解决了。如果您检查我之前尝试过的所有选项,那么与此类似的选项会包含此比较元素:!==而不是!=。这种变化带来了不同。如果有人可以解释原因,我会给予他/她正确答案。

5 个答案:

答案 0 :(得分:3)

结果永远不会被定义,它总是一个jQuery对象。如果操作没有找到任何元素,那么jQuery对象将为空,因此你要检查其中有多少元素,看看是否找到了任何元素:

if (currentQuestion.length > 0)

在检查了jQuery对象中确实存在任何元素之后,您可以检查是否有与该元素关联的数据。

如果没有数据与元素相关联,则当您尝试读取该值时,data方法将返回undefined。因此,要检查是否没有数据,您应该检查data方法返回的值的类型:

if (typeof currentQuestion.data("index") != "undefined")

答案 1 :(得分:1)

你想要的是currentQuestion.length

jQuery选择器返回与选择器匹配的元素数组。要测试数组中的值,您应该使用length

Boolean([].length); //false

因为0的计算结果为false,所以你可以使用if (currentQuestion.length)

如果您在错误时尝试检查它,请使用!

if (!currentQuestion.length)

关于为什么!=有效而不是!==的问题,我建议您提出这个问题:Difference between == and === in JavaScript

基本上,currentQuestion.data('index')并不严格等于null,但它可以评估为null:与[] == 0评估为true相同,但[] === 0 1}}评估为false

答案 2 :(得分:1)

如果要检查是否存在任何元素,请检查长度。

var currentQuestion = $(this).closest(".question");
if (currentQuestion.length > 0) {
    console.log("nextQ: " + currentQuestion.data("index"));
}

答案 3 :(得分:1)

if (currentQuestion.length) {

应该可以正常工作。如果它进入那里,它找到了一些东西。而不是查看if语句,你需要查看你的html,看看它找到了什么。

答案 4 :(得分:0)

这可能不是最优雅的解决方案。但不知何故

currentQuestion.data("index") != null

解决了。如果您检查我之前尝试过的所有选项,则与此选项最相似的是此比较元素:!==而不是!=。这种变化带来了不同。如果有人可以解释原因,我会给予他/她正确答案。