我知道有很多类似的问题,我读了其中一些。我什至再次重读了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 */注释代码。

附注:我在文件的第一行(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
}

关于javascript - 期望一个赋值或函数调用,而是看到一个表达式。 (W030),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53389936/

10-14 13:01
查看更多