2016-01-13 3 views
1

Я понимаю, что тройные операторы являются, по сути, ярлыком для оператора if-else, и я также понимаю, что && является логическим И. Однако я не понимаю, как эти два сочетаются в коде ниже.Как понять этот пример логического и тройного операторов?

Я тоже попытался сыграть с выходом, но это не помогло. Как интерпретировать следующее?

function greetUser(customerName, sex) { 
    var salutation = sex && sex === "Man" ? "Mr." : "Ms."; 
    console.log("Hello, " + salutation + " " + customerName); 
} 

ответ

3

Вообще, тройной оператор означает:

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.

+0

Но почему первый «пол» нужен вообще? Почему не просто тернарный оператор? Я не вижу, какую цель предлагает первый «секс». – AlanH

+0

@AlanH проверить мое редактирование – nem035

1

секс не определено и секс Man затем Mr.; else Ms.. Поэтому, если секс не определен; это тоже будет Ms..

0

Вы можете изменить строку

var salutation = sex && sex === "Man" ? "Mr." : "Ms."; 

в

var salutation = ((sex) && (sex === "Man" ? "Mr." : "Ms.")); 

Теперь sex === "Man" ? "Mr." : "Ms." говорит вам, что если значение переменной пола является Man и тип обоих переменных совпадают (то есть строка в этом случае), то он должен вернуть Mr еще Ms.

2

&& является логическим and определяется как,

(true && true) == true 
(true && false) == false 
(false && true) == false 
(false && false) == false 

Таким образом, утверждение A && B только справедливо, если А и В истинны

В вашем случае, с тройным оператором, некоторые скобки могут помогите, чтобы вы могли видеть, в каком порядке эти операторы оцениваются.

(sex && (sex === "Man")) ? "Mr." : "Ms." 

Так, на английском языке ...

если sex существует и sex является 'Man' то "Mr." еще "Ms."

В общем тройное оператор работает следующим образом:

(true OR false) ? (value if true) : (value if false) 
+0

Итак, первый «секс» - это просто проверить, не аргумент аргумента? Почему бы не «секс» вместо этого? – AlanH

Смежные вопросы