Работает ли оператор «условие» (? :) в JavaScript как в C? - PullRequest
2 голосов
/ 08 ноября 2010

Пример:

var x, y, z;
//...
x > 100 ? y = x : z = x ;

Ответы [ 8 ]

3 голосов
/ 08 ноября 2010

Да, он работает одинаково, хотя приоритет оператора всегда сложен, поэтому я бы рекомендовал скобки, чтобы избежать путаницы.

касательно связанных ..
Вы также можете использовать || в JavaScript, аналогично нулюоператор объединения ?? в C #

2 голосов
/ 08 ноября 2010

Я не уверен, что это работает:

x > 100 ? y = x : z = x ;

Но это работает:

y = x > 100 ? foo : bar ;
1 голос
/ 08 ноября 2010

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

Это window предполагает, что y и z являются глобальными.В противном случае вам необходимо указать правильный контекст.

window[x > 100 ? 'y' : 'z'] = x;
1 голос
/ 08 ноября 2010

Да, в соответствии с условным оператором Статья в Википедии и стандартом ECMA-262 (см. Раздел 11.12).

1 голос
/ 08 ноября 2010

Да, троичные операторы работают в Javascript так же, как и в C, C ++, C #, Java, Javascript, Perl и PHP.

1 голос
/ 08 ноября 2010

Да, он работает так же, как и в следующем базовом синтаксисе

condition ? true-expression : false-expression

Он только оценивает выражение и, следовательно, обрабатывает побочные эффекты для выражения, определяемого условным выражением.

Вот ссылка на документацию Mozilla по троичному оператору

1 голос
/ 08 ноября 2010

Это должно помочь вам (в будущем):

https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence

Прежде всего будет оцениваться сравнение >, поскольку оно имеет приоритет 8. ?: имеет приоритет 15, ниже чем 16 для =. Это означает, что троичный оператор будет запущен перед любыми присваиваниями (т. Е. Будет выполнен первый операнд, условие, а затем будет выбрана только ветвь).

Также простой тест

//x = 50;
x = 200;
x > 100 ? y = x : z = x ;
alert((typeof y)+'|'+(typeof z));

ответил бы на ваш вопрос.

1 голос
/ 08 ноября 2010

Да, троичные операторы работают одинаково в Javascript . В вашем примере объединено много выражений, поэтому приоритет может быть проблемой. Вы должны заключить в скобки, чтобы обеспечить приоритет.

...