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