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

Ser*_*ero 4 javascript jquery undefined

我们使用的jQuery版本是1.10.2.

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

这一切都很好,但是,如果我尝试检查offset()对象是否与undefined不同,代码总是在条件内部,那么为什么我的头部旋转真的是为什么?

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

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
   });
}
Run Code Online (Sandbox Code Playgroud)

当我使用IE开发工具调试时,我在控制台上看到button.offset()未定义但是button.offset()!= undefined返回true !!

有谁知道为什么会这样,以及我们如何才能最好地处理它?

谢谢.

Zev*_*cht 10

您正在检查它是否是一个被调用的字符串undefined,而不是它是否实际上是未定义的.

if (typeof something === "undefined") 
  alert("something is undefined");
Run Code Online (Sandbox Code Playgroud)

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

  • @jcsanyi没有问题来检查字符串`"undefined"`,只是`undefined`可能会导致bug.[请在此处阅读](http://stackoverflow.com/questions/27509/detecting-an-undefined-object-property-in-javascript/3550319#3550319) (2认同)

jcs*_*nyi 5

您需要检查关键字undefined,而不是字符串"undefined".

检查undefined应该如下所示:

if (someVar !== undefined)
Run Code Online (Sandbox Code Playgroud)

但是 - 如果jQuery没有找到某些东西 - 它不会返回undefined.它返回一个表示空集的jQuery对象.

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

if (isCurrent.length > 0)
Run Code Online (Sandbox Code Playgroud)

offset(),另一方面,如果没有定义,返回undefined - 所以你的第二次检查应如下所示:

if (button.offset() !== undefined)
Run Code Online (Sandbox Code Playgroud)