Перш за все, потрійний вираз не є заміною конструкції if / else - його еквіваленту конструкції if / else, яка повертає значення. Тобто, якщо "if / else" є кодом, потрійний вираз - це вираз , тобто він повертає значення.
Це означає кілька речей:
- використовуйте потрійні вирази лише тоді, коли у вас є ліва зміна з лівого боку,
=
якій слід призначити повернене значення
- використовувати потрійні вирази лише тоді, коли повернене значення має бути одним з двох значень (або використовувати вкладені вирази, якщо це відповідає)
- кожна частина виразу (після? і після:) повинна повертати значення без побічних ефектів (вираз
x = true
повертає істинне, оскільки всі вирази повертають останнє значення, але також змінює х, не маючи жодного впливу на повернене значення)
Коротше кажучи - «правильне» використання потрійного виразу є
var resultofexpression = conditionasboolean ? truepart: falsepart;
Замість вашого прикладу condition ? x=true : null ;
, коли ви використовуєте потрійний вираз для встановлення значення x
, ви можете використовувати це:
condition && (x = true);
Це все ще є виразом і, отже, не може пройти перевірку, тому ще кращим був би підхід
void(condition && x = true);
Останній пройде перевірку.
Але знову ж таки, якщо очікуване значення булеве, просто скористайтеся результатом самого вираження умови
var x = (condition); // var x = (foo == "bar");
ОНОВЛЕННЯ
Що стосується вашого зразка, можливо, це більше:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
мабуть, слід писати якx = (condition ? true : null);
. Крім того, у javascriptnull
оцінюється значення false, у цьому випадку ви можетеx = (condition);
досягти такого ж результату.