简写/隐式if()语句,无if

时间:2019-09-06 18:26:35

标签: javascript jquery smarty

在Smarty模板中找到

JavaScript / jQuery代码:

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

这并不是好奇,而是一个问题。

问题1:我以前从未见过这种结构。它似乎完全像if()语句一样工作,但是没有if关键字。是否有效/标准/可靠?

问题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往往会为初学者返回许多有关JavaScript的结果,这可能淹没了诸如此类更深奥的案例的答案这个。预先感谢您的任何见解!

1 个答案:

答案 0 :(得分:0)

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

  1. 在条件语句上省略if只是意味着结果在求值后将被丢弃。换句话说,这是一个错误。

  2. 令人困惑的是,我发现此代码的代码库同时使用jQuery和Prototype.js,这两个代码默认都使用$()构造。 $( 'test' ) && $( 'test' ).value === 'test'是有效的Prototype.js,它正在寻找id#test的元素。这与jQuery相反,在jQuery中要寻找id,它必须在选择器中以#为前缀。实际上,此代码库使用jQuery的noConflict()来避免使用$(),因为它会干扰Prototype.js。

  3. jQuery选择器可用于任何元素名称,而不仅仅是在HTML中有效的元素。

  4. 在提出问题之前,我应该做更多测试。再次感谢评论者的帮助和耐心!