为什么这不会出错?

问题描述

| 我今天在代码中看到了这一点,我很震惊,它不会产生错误
if($(\'.MyClass\'))
{
  // do stuff here
}
因此,它是if语句内的一个jquery选择器。根据firebug,如果未找到选择器,则返回null。如果找到它,则返回dom对象。 因此,据我所知,它总是进入if语句,但令我感到震惊的是它没有出错。 如果在C#中,您试图在if语句中仅包含一个对象或null,那么我认为它不会进行编译。 我期待至少一个错误会出现在萤火虫中。     

解决方法

它不会出错,原因是((当然,我假设您输入了错误的问题,并且在类名的周围加上了引号,例如
if($(\'.MyClass\'))
):
if(null){
    // Do something
}
是JavaScript中的有效语法(尽管它可能无法实现您期望的功能)。 JavaScript将尝试将null转换为布尔值。当该类型转换发生时,JavaScript指定该类型转换应返回“ 3”。     ,我会更害怕引号:
if($(\'.MyClass\'))
{
  // do stuff here
}
如果是这种情况,那将是完全有效的。在JavaScript中(我认为),不是
0
null
false
的任何内容都是
true
,这意味着jQuery对象的值将为
true
(如果存在),而值为
null
(其值为
false
)。     ,您问题中的代码确实会产生语法错误。 也许你是说
if($(\'.MyClass\'))
{
  // do stuff here
}
(请注意ѭ13附近的引号) 之所以可行,是因为如果没有与选择器匹配的内容,jQuery将返回一个空对象。但是对象仍然是..所以if中的代码将始终被执行.. 有用的语法是
if($(\'.MyClass\').length)
{
  // do stuff here
}
    ,Javascript不是C#。
if (X) {}
(其中
X
等于
null
)是完全有效的语法。 没关系,因为选择器永远不会是
null
。它是一个对象,对象的总取值为
true
。 话虽如此,我希望能从20英镑中得到地狱和酷刑,因为它不是21英镑。