三元运算符在JSHint中显示错误 - 应该是一个赋值或函数调用,但看到的却是一个表达式。

13

我有一个三元运算符dir === 'next' ? ++$currentSlide : --$currentSlide;在我的JS中用于增加或减少一个整数。当我在grunt JSHint中运行我的脚本时,这行代码会被标记为Expected an assignment or function call and instead saw an expression.

有人能给我建议吗?我应该如何设置我的条件等等?

5个回答

21

你误用了条件运算符作为一个if语句,这就是为什么你会得到那个提示。代码中真正的工作是作为表达式副作用完成的,而表达式的结果被忽略了。

如果改成真正的if语句,它应该是这样的:

if (dir === 'next') {
  ++$currentSlide;
} else {
  --$currentSlide;
}

如果您将条件运算符用作实际表达式,则可以使用它:

$currentSlide += dir === 'next' ? 1 : -1;

6
对于后者感到恐惧。 - Dave Newton
1
你单独使用++x;不会收到相同的警告吗? - sje397
3
@DaveNewton: $currentSlide += dir === 'next' || -1; :-) - Bergi
@sje397 JSLint 会抱怨 ++x,但更合理的 JSHint 不在乎。 - Rob W
或者"dir"可以是一个函数,而不是一个标志。 - Pointy
显示剩余4条评论

8
一般来说,为了消除“应该是一个赋值或函数调用,但看到的是一个表达式”的警告,你可以加上 /* jshint expr: true */。

3

如果您像这样写,它是否能通过?

$currentSlide = (dir === 'next' ? $currentSlide + 1 : $currentSlide - 1);

代码检查工具通常不喜欢使用增量/减量运算符,因为它们容易出现错误。


0

尝试使用这个语法:

$currentSlide = (dir === 'next' ? $currentSlide+1 : $currentSlide-1);

0

将三元运算符转换为if else条件语句

之前:

(pbook.id === book.id ? book.shelf = pbook.shelf : "none");

之后:

                     if(pbook.id === book.id){
                        return book.shelf = pbook.shelf
                      } else {
                        return "none"
                      };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接