我今天在代码中看到了这一点,我感到震惊的是它没有产生错误
if($('.MyClass'))
{
// do stuff here
}
所以它是if语句中的jquery选择器。根据firebug,如果未找到选择器,则返回null。如果找到它,则返回dom对象。
所以我可以告诉它总是进入if语句,但我更加震惊的是它没有错误。
如果在C#中你试图在if语句中只有一个对象或null,我认为它不会编译。
我期待至少有一个错误出现在萤火虫中。
答案 0 :(得分:3)
它没有错误,因为(我当然假设您错误输入了您的问题,并且您的类名称引用了if($('.MyClass'))
):
if(null){
// Do something
}
JavaScript中的有效语法(尽管它可能不会按照您的预期执行)。
JavaScript会尝试将null转换为布尔值。当发生转换时,JavaScript指定转换应该返回false
。
答案 1 :(得分:2)
我更害怕引用:
if($('.MyClass'))
{
// do stuff here
}
如果那个就是这种情况,那么它就完全有效了。在JavaScript(我认为)中,任何不是0
或null
或false
的内容都是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'))
。