在三元运算符中使用 count + 1 可以吗?

Is it ok to use count + 1 in ternary operator?

我想做的是检查数组中是否有元素,如果有,我想增加计数器。编译器在我执行 count++ 时报告错误,但在我执行 count + 1 时不报告错误,并且它正确递增。是不是因为count++是运算不是表达式,count+1是表达式?

let count = 0;

//not working
count = checkArr(arr) ? count++ : count;

//working
count = checkArr(arr) ? count + 1 : count;

使用前缀运算符。这是因为使用后缀,值在第一次读取后递增。使用前缀,您将在读取之前获得更新的 count 值。

count = checkArr(arr) ? ++count : count;

应该可以

像这样使用三元运算符是合法的。但是我会在这里争论代码风格。

count = checkArr(arr) ? count + 1 : count;

在这一行中,expressionFalse 部分(在 : 之后)完全没有用,什么也不做,它只是为了使三元运算符语法正确。

对于这种情况,IMO 以下构造更具可读性:

if (checkArr(arr)) {
    ++count;
}

if (checkArr(arr)) ++count;

没有什么是禁止的,但可以采纳一些好的做法。

混合分配 count =、调节 ?: 和 post 增量 ++ 在同一行内有很多。

编写代码时始终寻求最简单的解决方案。在你的情况下:

if (checkArr(arr)) {
  count += 1;
}

比在特定上下文中似乎不合适的三元组更容易理解。


现有的审计代码质量的工具,如sonarqube、eslint ...

他们总是要求简单。

关于三元规则的示例:

关于post/pre增量的例子:

他们希望编码人员避免使用 ++/-- 因为对于某些人来说它可能会产生误导。很多人不知道 ++varvar++ 之间的区别,这可能会导致错误。更喜欢 var += 1;.

count++++count的值不同。

简而言之:

count = count++ : count++ 的值是 BEFORE 增量的值。

count = ++count : ++count 的值是 AFTER 的值。

let count = 5;
console.log(count++); //return 5
console.log(count); //return 6

let count = 10;
console.log(++count); //return 11
console.log(count); //return 11

这对 count----count

是一样的

不过这里需要注意一点,在eslint中这会被认为是错误的,建议使用+=1代替。

Link 仅供参考:https://eslint.org/docs/rules/no-plusplus