Странный троичный оператор Javascript - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь понять, как работают троичные операторы, и я наткнулся на этот пример:

b.d >= mystr.length && (function1(b, a), a=0);

Что означает &&?это используется как оператор AND?как это переводится в регулярное утверждение?Что означает кома до а = 0?Спасибо!

Ответы [ 3 ]

2 голосов
/ 23 января 2012

Это не троичный.

Кроме того, запятая внутри этого оператора группировки в основном гарантирует, что группа всегда будет возвращать значение последнего выражения a=0, которое равно 0.

Этот пример всегда будет иметь значение false или 0 (что неверно).

Edit:

Для полноты вот троичный оператор:

a > b ? functionIfTrue() : functionIfFalse();

Логически идентичен:

if ( a > b ){
    functionIfTrue();
} else {
    functionIfFalse();
}
1 голос
/ 23 января 2012

&& является оператором AND.Если слева от него правда, он оценивает правую сторону (и возвращает его)., является оператором запятой.(Оператор запятой оценивает обе его стороны, слева направо, и возвращает правую сторону).Таким образом, этот код выглядит так:

if (b.d>=mystr.lengh) {
 function1(b,a);
 a=0;
}

(за исключением того, что ваш код возвращает 0)

(мой родной язык C, поэтому, возможно, я ошибаюсь, но я думаю,в этом случае javascript работает как C)

0 голосов
/ 23 января 2012

Оператор && является логическим оператором AND. Он вычисляет выражения слева направо и возвращает первое значение Falsey или значение последнего выражения.

Если оно доходит до последнего выражения, оно возвращает свое значение, каким бы оно ни было.

Итак:

var x = (1 < 2) && ( 4 > 3) && 'fred';

устанавливает x в значение "fred", тогда как:

var y = (1 < 2) && 0 && 'fred';

устанавливает y на 0.

...