Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript offset()未定义,但==或===不这么认为_Javascript_Jquery_Undefined - Fatal编程技术网

Javascript offset()未定义,但==或===不这么认为

Javascript offset()未定义,但==或===不这么认为,javascript,jquery,undefined,Javascript,Jquery,Undefined,我们使用的jQuery版本是1.10.2 在特定的屏幕上,我们使用jQuery获取DOM元素,并尝试获取其offset()对象。有时,根据jQuery文档,对象可能不显示,在这种情况下,offset()不受支持 这一切都很好,但真正让我头晕目眩的是,为什么如果我试图检查offset()对象是否与未定义的对象不同,代码总是在条件内 我的代码(由于保密协议而简化)如下: var isCurrent = $('.detail-current[value=\'true\']:first'); if (i

我们使用的jQuery版本是1.10.2

在特定的屏幕上,我们使用jQuery获取DOM元素,并尝试获取其offset()对象。有时,根据jQuery文档,对象可能不显示,在这种情况下,offset()不受支持

这一切都很好,但真正让我头晕目眩的是,为什么如果我试图检查offset()对象是否与未定义的对象不同,代码总是在条件内

我的代码(由于保密协议而简化)如下:

var isCurrent = $('.detail-current[value=\'true\']:first');
if (isCurrent != 'undefined') {
   var button = isCurrent.closest('.batch-item').find('.batch-item-top').find('input[name=\'edit\']');

   var myOffsetTop = 0;
   if(button.offset() != 'undefined')
      myOffsetTop = button.offset().top;

   $('html, body').animate({
      scrollTop: myOffsetTop - 50
   });
}
当我使用IE开发工具调试时,我在控制台上看到button.offset()未定义,但button.offset()!=未定义返回true

有人知道为什么会发生这种情况,以及我们如何才能最好地处理它吗


谢谢。

您正在检查它是否是一个名为
未定义的字符串,而不是它是否实际未定义

if (typeof something === "undefined") 
  alert("something is undefined");

要检查它是否为NULL,请使用
if(NULL==something)

您需要检查关键字
undefined
,而不是字符串
“undefined”

未定义的检查应如下所示:

if (someVar !== undefined)
if (isCurrent.length > 0)
if (button.offset() !== undefined)
然而,如果jQuery没有找到什么东西,它不会返回undefined。它返回一个表示空集的jQuery对象

因此,您的第一次检查应该使用该属性,如下所示:

if (someVar !== undefined)
if (isCurrent.length > 0)
if (button.offset() !== undefined)
offset()
,另一方面,如果没有定义,则会返回未定义的值-因此,您的第二次检查应如下所示:

if (someVar !== undefined)
if (isCurrent.length > 0)
if (button.offset() !== undefined)

你不是在测试未定义的,它应该是

if(typeof button.offset() !== 'undefined')

为什么不测试一下
按钮。长度
是一个真实值(非虚假值)?如果存在,它应该有一个
offset()
而不是
未定义的
。请尝试console.log。顺便说一句,它的(typeof button.offset()!='undefined')在javascript中的计算结果为false,因此您只需执行if(button.offset())即可,而无需将其与任何内容进行比较。您编写它的方式是(button.offset()!==undefined),而不必使用引号来测试
未定义的
类型。它导致了太多的错误,就像问题中的那样。什么错误?问题中的那个。它是一个会导致比它应该解决的问题更多的代码问题的防护。更好的方法是确保全局
未定义的
永远不会被重新定义,这在现代浏览器中无论如何都是不可能的。将类型名作为字符串进行比较似乎总是有点不妥。
undefined
关键字的全部要点是,这样您就不必这样做了。@jcsanyi根据字符串
“undefined”
检查它没有问题,只是
undefined
可能会引起错误@GrijeshChauhan:关键是
$
函数不会返回
未定义的
,因此该条件将始终通过。jcsanyi测试
.length
的解决方案是正确的。