期望赋值或函数调用,但看到的是表达式。 (W030)

Expected an assignment or function call and instead saw an expression. (W030)

我知道有很多类似的问题,我看了其中的一些。我什至重新阅读了 MDN of the ternary operator,但我仍然不明白为什么 JSHint 向我显示以下代码的上述错误:

passHasNumber ? strength++ :
        passHasTwoNumbers ? strength++ :
        passHasCapitalLetter ? strength++ :
        passHasTwoCapitalLetters ? strength++ :
        passHasWhitespace ? strength++ :
        passHasSymbols ? strength++ :
        passVeryBad.innerHTML = `Only lowercase letters, huh?
        You can do better than that!`; // error appears here

我不喜欢有错误的代码,所以如果可能的话,我希望对这段代码有不同的看法,尽可能干净;我不喜欢用 /* jshint -W030 */ 注释来注释代码。

P.S.: 我在文件的第一行遇到了同样的错误,即 use strict 语句,但带有反引号。如何解决?

您将条件运算符滥用为 if 语句 - JSHint 看到了孤立的表达式并抱怨它。使用 if / else 代替:

if (passHasNumber || passHasTwoNumbers || passHasCapitalLetter || passHasTwoCapitalLetters || passHasWhitespace || passHasSymbols) {
  strength++;
} else {
  passVeryBad.innerHTML = `Only lowercase letters, huh?
  You can do better than that!`; // error appears here
}

您应该只在需要使用 表达式计算结果为 的情况下使用条件运算符,例如:

const foo = condition ? 'foo' : 'error!';

但是,听起来您 可能 想要为每个真值布尔值递增 strength,这比仅递增 strength 更有意义 一次,在这种情况下:

const strength = passHasNumber + passHasTwoNumbers + passHasCapitalLetter + passHasTwoCapitalLetters + passHasWhitespace + passHasSymbols;
if (strength === 0) {
  passVeryBad.innerHTML = `Only lowercase letters, huh?
  You can do better than that!`; // error appears here
}