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

时间:2018-11-20 09:30:14

标签: javascript jshint

我知道有很多类似的问题,并且我读了其中一些。我什至再次重读了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语句中遇到了相同的错误,但带有回勾号)。该怎么解决?

1 个答案:

答案 0 :(得分:2)

您正在滥用条件运算符作为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
}