Все знают, что пользоваться browser-detection – неправильно. Подозреваю, эти же все знают, что правильно пользоваться так называемым object-detection. Если вы еще не входите в число этих «всех», сходите к Peter-Paul Koch’y, он подробно расписал, чем одно хуже другого.
Предположим, мы пишем класс ArrayUtilites, который удачно сочетает в себе разные вкусняшки для работы с массивами. И мы хотим, чтобы у нас был кроссбраузерный метод each. Мой вариант написания, сам алгоритм взят с MDC:forEach#compability:
if (typeof ArrayUtilites == "undefined" || !ArrayUtilites) { var ArrayUtilites = {}; } ArrayUtilites.each = (Array.prototype.forEach) ? function (a, f, o) { Array.prototype.forEach.call(a, f, o || A); return ArrayUtilites; } : function (a, f, o) { for (var i = 0, it; it = a[i]; i=i+1) { f.call(o || A, it, i, a); } return ArrayUtilites; };
Как уважаемые любители JavaScript воспринимают такой синтакс для feature-detection? А именно, использование тернарного оператора (a ? b : c) вместо условной конструкции (if else)?
Видимо, у меня какое-то помутнение – не могу понять что же такое «A».
Аппетит к тернарным операторам приходит во время «еды» )
@eg
Упс :)
A– это опечатка :)Это я скопировал кусочек из рабочего кода, и как следует не проверил. В данном случае
A– это указатель наArrayUtilites.эта штука называется в разных местах ещё как browser feature sniffing и capabilities detection
Cправедливое уточнение.
Действительно, и такие названия можно встретить.
Как мне кажется тернарный оператор стоит использовать в случае, когда выражение помещается в одну строку, иначе – if. В примере же сильно страдает читабельность.
Хорошие доводы.
Ну еще можно привести в пользу if-a такой аргумент: он работает быстрее примерно на 50%. Разумеется, в js. В компилируемых языках, скорее всего, и то, и то, преобразуется в условную конструкцию.
Но мне все равно чем-то нравятся тернарные операторы. Ну и кроме того, они короче при записи и лучше сжимаются всякими компрессорами – что во всяких граничных случаях, вроде букмарклетов, может пригодиться.
Приведенный пример очень трудно воспринимать. Даже отступы тут не помогают. Это еще хорошо что методы всего в 2-3 строки. Иначе «:» просто не найти. Согласен с ptzn, его можно использовать только если выражение в одну строку.