在三元运算符中执行函数

时间:2015-10-07 14:12:51

标签: javascript jquery jshint

我正在使用JSHint检查我的JS文件以找出错误。

我刚收到这个警告:

  

期望一个赋值或函数调用,而是看到一个表达式。

(mandatEngagementExists)
    ? $('.mandat-type[value=1]').prop('checked', false).prop('disabled', true)
    : $('.mandat-type[value=1]').prop('disabled', false);

mandatEngagementExists是一个布尔值。 我所有的JS都处于严格模式。

这段代码正在运行,所以我想知道JSHint是否有点过于严格,或者我是否应该切换到经典的if / else。

2 个答案:

答案 0 :(得分:2)

直接在.prop("property", boolean)

中使用布尔值
$(el).prop('checked', myBoolean);

使用return

function myFn() {
    /* Code here */
    return myBoolean ? $(el).doThis() : $(el).doThat();
    /* !!!!!!!!! >>> Cannot have more code here since `return` was used */
}

使用IIFE

function myFn() {
     /* Code here */
    (function(){
       return myBoolean? $(el).doThis() : $(el).doThat();
    }());
     /* Code here */
}

使用var

var someVar;
function myFn() {
    /* Code here */
    someVar = myBoolean? $(el).doThis() : $(el).doThat();
    /* Code here */
}

使用if else

function myFn() {
    /* Code here */
    if(myBoolean) {
        $(el).doThis();
    } else {
        $(el).doThat();
    }
    /* Code here */
}

答案 1 :(得分:2)

JSHint认为三元运算符被称为忽略被调用函数的返回值是不好的做法。

请参阅Why does JSHint dislike ternaries for method calls on objects?

你可以忽略警告,设置假变量

var temp=(mandatEngagementExists)
    ? $('.mandat-type[value=1]').prop('checked', false).prop('disabled', true)
    : $('.mandat-type[value=1]').prop('disabled', false);

或使用此

/*jshint expr:true */