У JS ви можете повернути булеве значення, яке має власні властивості. Напр. коли Modernizr випробовує підтримку відео, він повертається true
або, false
але повернений Boolean (Bool є об'єктом першого класу в JS) має властивості, що визначають, які формати підтримуються. Спочатку це мене трохи здивувало, але потім мені почала подобатися ідея і почала цікавитись, чому вона, здається, використовується досить щадно?
Це виглядає як елегантний спосіб поводження з усіма тими сценаріями, коли ви в основному хочете дізнатися, чи щось є правдою чи неправдою, але вас може зацікавити додаткова інформація, яку ви можете визначити, не визначаючи спеціальний об'єкт повернення або використовуючи функцію зворотного виклику, підготовлену для прийняти більше параметрів. Таким чином ви зберігаєте дуже універсальний підпис функції без шкоди для можливості повернення більш складних даних.
Проти цього я можу собі уявити 3 аргументи:
- Це трохи незвично / несподівано, коли будь-який інтерфейс, мабуть, краще бути зрозумілим і не хитрим.
- Це може бути солом'яним аргументом, але, маючи це трохи кращий випадок, я можу уявити, що це тихо повертається у деяких оптимізаторах JS, угльовителе, VM або після незначної зміни специфікації мови тощо.
- Існує кращий - стислий, зрозумілий і загальний спосіб зробити саме те саме.
Тож моє запитання: чи є якісь вагомі причини уникати використання булів з додатковими властивостями? Це трюк чи частування?
Сюжет закручує попередження.
Вище - оригінальне запитання у повній красі. Як Меттью Крамлі і сеневольдсен вказали, це засноване на помилковій (хибній?) Передумові. Тонка традиція JS - це те, що Модернізр - це мовна хитрість і брудна. Він зводиться до JS, який має примітивний bool, який, якщо встановлено значення false, залишатиметься помилковим навіть після ПІДГОТОВКИ, щоб додати реквізит (який виходить з ладу) і булевий об'єкт, який може мати власні реквізити, але бути об'єктом завжди є правдою. Modernizr повертає або булева помилка, або truthy булевий об'єкт.
В моєму первісному запитанні припущення припустимо, що трюк працює по-різному, тому більшість популярних відповідей стосуються (цілком справедливого) аспекту стандартів кодування. Однак я вважаю, що відповіді, які розкривають цілий трюк, найбільш корисні (а також кінцеві аргументи проти використання методу), тому я приймаю одну з них. Дякую всім учасникам!
null
якщо не підтримуються, і масив форматів, якщо так. Список вважається правдою в JS і null
є хибним.