我有以下内容:
var currentQuestion = $(this).closest(".question")
我已尝试在this,this和this问题中建议的所有内容:
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
解决了。如果您检查我之前尝试过的所有选项,那么与此类似的选项会包含此比较元素:!==
而不是!=
。这种变化带来了不同。如果有人可以解释原因,我会给予他/她正确答案。
答案 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
解决了。如果您检查我之前尝试过的所有选项,则与此选项最相似的是此比较元素:!==
而不是!=
。这种变化带来了不同。如果有人可以解释原因,我会给予他/她正确答案。