【问题标题】:Execute function in ternary operator [duplicate]在三元运算符中执行函数[重复]
【发布时间】:2015-10-07 14:12:50
【问题描述】:

我正在使用 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。

【问题讨论】:

  • jslinterror 描述。该语句认为函数调用返回的值应该被捕获在一个变量中,所以它说Expected assignment

标签: javascript jquery jshint


【解决方案1】:

.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 */
}

【讨论】:

  • 这将退出当前函数
  • @haim770 否,如果您将其设置在函数末尾或将其包装在另一个函数(如 IIFE)中
  • 我正要提到 IIFE 作为一个选项。但我认为这里的重点是节省一些击键(不使用if {} else {}),如果你已经在使用 IIFE,你什么也得不到,只有更多的代码。
  • 感谢您的完整回答。我只保留我的代码,它是最短的
  • @FLX 不客气。 PS,shortest possible 使用$(el).prop('checked', myBoolean); 如上所述
【解决方案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 */

【讨论】:

  • 好答案。就我个人而言,我只是切换到if/else - 使意图更加清晰。毕竟,阅读代码的频率远高于编写代码的频率。
  • 谢谢。这个 jshint 表达式会很有用。
猜你喜欢
  • 1970-01-01
  • 2016-11-21
  • 2018-09-26
  • 2017-12-06
  • 2012-10-15
  • 2019-07-14
  • 2011-05-05
  • 2014-09-29
  • 1970-01-01
相关资源
最近更新 更多