为什么这不会出错?

时间:2011-05-26 15:51:43

标签: jquery

我今天在代码中看到了这一点,我感到震惊的是它没有产生错误

if($('.MyClass'))
{
  // do stuff here
}

所以它是if语句中的jquery选择器。根据firebug,如果未找到选择器,则返回null。如果找到它,则返回dom对象。

所以我可以告诉它总是进入if语句,但我更加震惊的是它没有错误。

如果在C#中你试图在if语句中只有一个对象或null,我认为它不会编译。

我期待至少有一个错误出现在萤火虫中。

4 个答案:

答案 0 :(得分:3)

它没有错误,因为(我当然假设您错误输入了您的问题,并且您的类名称引用了if($('.MyClass'))):

if(null){
    // Do something
}

JavaScript中的有效语法(尽管它可能不会按照您的预期执行)。

JavaScript会尝试将null转换为布尔值。当发生转换时,JavaScript指定转换应该返回false

答案 1 :(得分:2)

我更害怕引用:

if($('.MyClass'))
{
  // do stuff here
}

如果那个就是这种情况,那么它就完全有效了。在JavaScript(我认为)中,任何不是0nullfalse的内容都是true,这意味着jQuery对象将评估为true如果它存在,则null(评估为false)如果不存在。

答案 2 :(得分:0)

问题中的代码会产生语法错误。

也许你的意思是

if($('.MyClass'))
{
  // do stuff here
}

注意.MyClass 周围的引号)

这是有效的,因为如果没有与选择器匹配的话,jQuery将返回一个空对象。但是一个对象,所以if中的代码将永远执行..

有用的语法是

if($('.MyClass').length)
{
  // do stuff here
}

答案 3 :(得分:0)

Javascript不是C#。

if (X) {}(其中X评估为null)是完全有效的语法。

并不重要,因为无论如何选择器永远不会是null。它是一个对象,对象总是评估为true

所有人都说,我期待if ($(.MyClass))的地狱和折磨,因为它不是if ($('.MyClass'))