Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有内联运算符仅在值为true时执行某些操作?_Javascript_Operators - Fatal编程技术网

Javascript 是否有内联运算符仅在值为true时执行某些操作?

Javascript 是否有内联运算符仅在值为true时执行某些操作?,javascript,operators,Javascript,Operators,我发现自己编写了很多类似的代码: $('.selector').addClass(condition ? 'class' : ''); 我知道这可能是愚蠢和抱怨,但我只是好奇是否有一种方法可以做到这一点,而不需要Javascript中的错误条件。我环顾四周,并没有找到任何能做到这一点的运营商,但我可能(希望我是)错了 我不一定要优化我的代码,这只是好奇:) 谢谢。JavaScript的&&操作符。您将在许多脚本和库中看到类似的内容: condition && $('.selec

我发现自己编写了很多类似的代码:

$('.selector').addClass(condition ? 'class' : '');
我知道这可能是愚蠢和抱怨,但我只是好奇是否有一种方法可以做到这一点,而不需要Javascript中的错误条件。我环顾四周,并没有找到任何能做到这一点的运营商,但我可能(希望我是)错了

我不一定要优化我的代码,这只是好奇:)


谢谢。

JavaScript的
&&
操作符。您将在许多脚本和库中看到类似的内容:

condition && $('.selector').addClass('class');
或者,正如mgibsonbr的注释所述,您可以在方法本身中简单地
&&

$('.selector').addClass(condition && 'class');
不过,这并不是那么直观,因为众所周知,当两个值都是真实值时,
a&&b
在JavaScript中导致
b
,而不像在其他语言中那样
true

!condition || func();  // launch func only if condition holds
如果
条件
为假,则
!条件
为真。由于
|
的第一个操作数为true,因此整个表达式为true。
func()


如果
条件
为真,
!条件
为false,因此必须调用
func()
,才能计算析取。

您可以编写自己的jQuery单子操作。尽管应该非常谨慎地使用它(以减少$.*名称空间的混乱),但如果您经常这样做,这仍然是最优雅的方法

(function($) {
    $.fn.addClassIf = function() {  
        var args = Array.prototype.slice.call(arguments, 0, -1);
        var condition = Array.prototype.slice.call(arguments, -1)[0];

        return condition ? this.addClass.apply(this,args) : this;
    };
})(jQuery);
演示:

$(“正文”)
[​…​​]
>$('body').addClassIf('test1',true)
[​…​​]
>$('body').addClassIf('test2',false)
[​…​​]
>$('body').addClassIf('test3',true)
[​…​​]

ohhh非常可爱!虽然我希望可以直接内联,这样我就可以保持链接。但是这是一个非常酷的想法:)@Jason只需使用
条件和“类”
,我认为它不会有任何负面影响(或任何影响)如果你将
false
传递给
addClass
。是的,我也不认为我会预测到这个结果。很好。我相信这是BoltClock答案的必然结果。太棒了!主要的区别是,这总是会返回一个“真实的”值,而BoltClock也可以返回
false
。@Jason是的,基本上,我只是键入的速度较慢:)好吧,在这个例子中,如果条件成立,则启动函数,如果条件不成立,则什么也不做。然而,在您的例子中,如果条件成立,则返回字符串,如果条件不成立,则什么也不返回?这是否意味着我们正在寻找的运算符为了(或发明)在false的情况下是否应该返回undefined?我正在寻找的功能是,如果条件为true,则只执行一些操作,如果条件为true,则不执行任何操作。在我的示例中,如果某个条件为true,则我只想添加一个类,但我希望在不中断链的情况下内联执行,并且不必再次遍历DOM。我知道,微优化,但如果瑞克成了第二天性,我不必担心以后的优化:)
> $('body')
[<body class=​"question-page">​…​</body>​]

> $('body').addClassIf('test1', true)
[<body class=​"question-page test1">​…​</body>​]

> $('body').addClassIf('test2', false)
[<body class=​"question-page test1">​…​</body>​]

> $('body').addClassIf('test3', true)
[<body class=​"question-page test1 test3">​…​</body>​]