2014-02-18 5 views
0

Извинения, если это обман, я видел только сравнение or ||.Тернар против логических операторов

Если я хочу, чтобы установить значение одной переменной на основе одного условия, где b всегда будет оценивать в true (не 0, NULL, не определено), то почему бы использовать тройной оператор a?b:c над логическим a&&b||c? Они оба, кажется, выполняют точную ту же функцию, хотя тесты на jsperf показывают, что последнее немного быстрее.

Какова цель тернарного оператора, если очень похожая операция и синтаксис превосходят ее при одной и той же задаче? Более любопытно, что это делает do, что делает его медленнее?

+2

Это не то же самое. Проверьте «1? 0: 2' против '1 && 0 || 2'. –

+0

Это правда, возможно, я должен уточнить, что в гораздо более распространенном экземпляре оба значения оцениваются как true. –

ответ

3

Что делать, если вы хотите условно установить значение 0 или какое-то ненулевое значение?

var x = condition() && 0 || 1; 

Это не сработает, потому что 0 является фальсификатором.

var x = condition() ? 0 : 1; 

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

+0

Единственное исключение, хотя это вызывает мой последний вопрос: если логический оператор дважды проверяет true, почему он быстрее? Разве это не будет делать дважды проверку? –

+0

@fay Я не уверен; с чем-то основным и простым, как * любой из этих моделей, производительность (для меня) не кажется актуальной. Этот тип кода не является тем, что делает страницы медленными. – Pointy

+0

Мне нравится учиться, поэтому приложение довольно неуместно. Хотя я скажу, что это не для меня, так как я использую это для части физики игры HTML5. Выполнение этого над каждым экземпляром каждый кадр означает более быстрый вариант и почему это самый быстрый вариант - это полезные знания, так как я люблю учиться и потому, что он имеет реальное приложение в моей ситуации. –

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