function中使用三木运算符ESlint会报错,为什么?

selectItem(item, type) {
  // if (type === 'year') {
  //   this.nowYear = item;
  // }
  type === 'year' ? this.nowYear = item : this.nowMonth = item;
},

这样写ESlint会报错,
图片描述

使用if else 就可以,为什么?这样写那里不规范了

阅读 8.2k
4 个回答

先回复 @Xeira :

三目运算符期待一个布尔返回值,显然你的后面两个选项都不符合要求

这是不对的,从语法上来说,三目运算符后面的两项只要有返回值就是符合语法的。
只要是表达式就一定有返回值,就连赋值表达式都是如此。

比如说吧:

var ss, s1;
s1 = (ss = '123');
console.log(ss);    //"123"
console.log(s1);    //"123"

赋值表达式返回的值就是等号的右值。
你还能在ifwhile等等的条件判断语句里面赋值的,虽然并不常见就是了。


回到题主的问题中,这个问题其实是因为你的eslint规则问题……
你看给出的错误提示:no-unused-expressions,别告诉我你不认识英文……
这条规则的具体解释在这里:no-unused-expressions

这条规则有两个子规则:
一个是是否允许短路求值(allowShortCircuit)
还有一个是是否允许三目运算符(allowTernary)

所以你在eslint的配置文件里rules规则里面设定下就行了,短路求值和三目运算都允许:

'no-unused-expressions': 0

想要单独禁止某一项,比如下面是允许三目,不允许短路:

'no-unused-expressions': [2, { 'allowShortCircuit': false, 'allowTernary': true }]

void(type == 'year': ...? ...)

这样试试

应该是this指向的问题吧。。。不是用严格模式了。this找不到window了。

把this换成window.

不好意思。答非所问了。

;(type === 'year' ? this.nowYear = item : this.nowMonth = item);这样呢?

三目运算符期待一个布尔返回值,显然你的后面两个选项都不符合要求

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题