var url = age > 18 ? (
alert("OK, you can go."),
// alert returns "undefined", but it will be ignored because
// isn't the last comma-separated value of the parenthesis
"continue.html" // the value to be assigned if age > 18
) : (
alert("You are much too young!"),
alert("Sorry :-("), // Q2) ***When does it evaluate this line?
// etc. etc.
"stop.html" // the value to be assigned if !(age > 18) Q1) this line is evaluated first right?
);
location.assign(url); // "stop.html"
Вопрос: При использовании оператора ternary
он оценивает самый правый член правого операнда? Поэтому, если я помещаю запятые, тогда это займет выражение самой правой запятой.Приоритет привязки оператора к переменному
Если бы я вызвал этот процесс, чтобы он каким-то образом оценил второй самый правый член (Q2).
Является ли все ложное предложение назначенным переменной? Если да, то как получается выход только stop.html
и не включает Sorry
или You are much too young!
?
Q: Почему вы тратите время на что-то такое извращенное? Для «реального кода» вы хотите попытаться * избежать неопределенного поведения, не так ли? ПРЕДЛОЖЕНИЕ: 1) замените «Console.log()» на «alert()», 2) выполните код под отладчиком, 3) обязательно попробуйте несколько разных браузеров. Например, работает ли Chrome иначе, чем FF/Firebug? IE11 по-разному от IE8? – paulsm4
Ваш код отлично работает для меня. Убедитесь, что всплывающие окна включены. – dYale
Это просто потому, что все утверждения выполняются, но назначается только последний возврат. Если вы будете использовать оператор '||' вместо ',', то он остановится при первом значении со значением. Но да, это похоже на вариант использования _wrong_ для тройного оператора. – somethinghere