Shorthand/implicit 没有 if 的 if() 语句

Shorthand/implicit if() statement with no if

JavaScript/jQuery 在 Smarty 模板中找到的代码:

( $( 'carriercode' ) && $( 'carriercode' ).value == '' )
{
    alert( 'Please select Shipping Carrier Code' );
    return false;
}

这与其说是一个问题,不如说是一种好奇心。

问题1:我以前从未见过这种结构。它看起来与 if() 语句完全一样,但没有 if 关键字。 valid/standard/reliably 受支持吗?

问题 2:jQuery 选择器正在寻找 carriercode 标签,这显然不是标准 HTML 的一部分。这是 Smarty 的特性,还是只是懒惰的开发人员编写了新标签?同样,它是否有效(在 Smarty 中)、标准做法,以及它是否可靠地工作?

相关:我在一个简单的 HTML 页面(如下)中做了一个最小测试,它有效但不是有效标记。我很好奇它是否能在不同的环境中可靠地工作。我在编写自己的代码时始终遵循标准,但有时在加入现有项目时进入并修复所有代码是不切实际的。

<!doctype html>
<html lang='en-gb'>
    <head>
        <meta charset='utf-8' />
        <title>Test</title>
        <script src="https://code.jquery.com/jquery-1.11.3.js"></script>
        <script>
            //<![CDATA[
            ( $( 'test' ) && $( 'test' ).value === 'test' )
            {
                alert( 'test!' );
            }
            //]]>
        </script>
    </head>
    <body>
        <h1>Test</h1>
        <p>Test</p>
        <test value='test'></test>
    </body>
</html>

我一直无法通过搜索互联网找到关于这些问题的更多信息,搜索 if 往往会 return 很多关于 JavaScript 的结果,适合初学者这可能会淹没像这样更深奥的案例的答案。提前感谢您的任何见解!

总结评论中提供的有用答案,以及更多信息:

  1. 省略条件语句中的if只是意味着结果在评估后被丢弃。换句话说,这是一个错误。

  2. 令人困惑的是,我找到这段代码的代码库同时使用了 jQuery 和 Prototype.js,它们都默认使用 $() 结构。 $( 'test' ) && $( 'test' ).value === 'test' 有效 Prototype.js,它正在寻找 id#test 的元素。这与 jQuery 形成对比,在其中查找 id 它必须在选择器中以 # 为前缀。事实上,此代码库使用 jQuery 的 noConflict() 来避免使用 $(),因为它会干扰 Prototype.js.

  3. jQuery 选择器适用于 任何 元素名称,而不仅仅是那些在 HTML.

    中有效的元素名称
  4. 我应该在提问之前做更多的测试。再次感谢评论者的帮助和耐心!