Вообще, тройной оператор означает:
condition ? (value returned if condition is true) : (value returned if condition is false)
В вашем примере, условие sex && sex === 'Man'
, что означает, что значение, содержащееся в переменном sex
является truthy и strictly equal в строку "Man"
.
Вот разбивка:
var salutation;
if(sex && sex === 'Man') {
salutation = 'Mr';
} else {
salutation = 'Ms';
}
Кроме того, в этом конкретном примере, так как вы используете строгое равенство (т.е. ===
) сравнение, не существует какой-либо пункт проверки правдивости для sex
, это не требуется. Ваше состояние может быть просто:
var salutation = sex === "Man" ? "Mr." : "Ms.";
Объяснение: При использовании &&
оба операнда приводятся к булевы первых, так что их «правдивости» может быть и-е изд. Например, скажем sex = 'Man'
, то ваше состояние по сути будет:
if('Man' && 'Man' === 'Man')
Какой принуждают булевы является:
if(true && true)
что явно избыточно. Read more about JavaScript type coercion.
Это truthy проверки является хорошей проверкой безопасности в других ситуациях, возникающих при использовании нестрогого оператора сравнения, таких как ==
, <
, >
... вместо ===
.
Простым термином, используя ==
, сначала сопоставляет оба предмета того же типа перед тем, как сравнивать, что может lead to bugs. Использование ===
немедленно возвращает false
, если типы отличаются, следовательно, это безопаснее.
Описание: another useful resource для сравнения с JavaScript.
Но почему первый «пол» нужен вообще? Почему не просто тернарный оператор? Я не вижу, какую цель предлагает первый «секс». – AlanH
@AlanH проверить мое редактирование – nem035