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

查看:440
本文介绍了javascript - function中使用三木运算符ESlint会报错,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

这样写ESlint会报错,

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

解决方案

先回复 @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 }]

这篇关于javascript - function中使用三木运算符ESlint会报错,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆