реализация angular.isBoolean?

#javascript #angularjs #underscore.js #lodash

#javascript #angularjs #underscore.js #Lodash

Вопрос:

Я просматривал некоторый исходный код, и подчеркивание / Lodash было включено только для _.isBoolean функции. Источник подчеркивания приведен ниже:

 _.isBoolean = function(obj) {
    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
};
  

Глядя на функциональные компоненты в ng, я вижу похожие функции ( angular.isObject , angular.isString angular.isNumber и т.д.), Но не angular.isBoolean функцию.

angular.js в исходном коде есть эта внутренняя функция (источник ниже), но проблема с просьбой сделать общедоступной (подвиг: зарегистрировать isBoolean в качестве общедоступного члена глобального angular # 5185) была закрыта со словами «другие библиотеки, такие как underscore и Lodash, хорошо решают эти проблемы».

 function isBoolean(value) {
  return typeof value === 'boolean';
}
  

Вопросы:

  • Моей первоначальной реакцией было скопировать isBoolean и создать именованную функцию в моем коде, но какая реализация более правильная?
  • Использую ли я версию подчеркивания в ожидании совместимости с будущим обновлением?
  • Я предполагаю, что это плохая идея «уклоняться» от моей реализации angular.isBoolean ?

Комментарии:

1. Что вы подразумеваете под «преобразовать в локальную функцию»?

2. Понимаете ли вы различия между функциями? Тогда вы должны знать, что «более правильного» варианта не существует.

3. @Ian Кто-то, должно быть. Проверка была добавлена через два года после запуска проекта: github.com/jashkenas/underscore/commit /… 🙂 Я действительно думаю, что помню, как видел Modernizr, использующий их.

4. @Ian github.com/Modernizr/Modernizr/… Для свойств. Если значение true, оно имеет свойства с конкретными деталями. Действительно, любой объект будет работать (быть правдивым), но, возможно, они имеют дело с действиями потребителей result == true .

5. @Ian: При поиске на GitHub я нашел это только в а) тестовых примерах б) цитатах из спецификаций 🙂

Ответ №1:

Я просматривал некоторый исходный код, и подчеркивание / Lodash было включено только для функции _.isBoolean. […] Моей первоначальной реакцией было преобразовать isBoolean в локальную функцию

Да, хорошая идея (если подчеркнуть просто). Может быть, даже не функция, а просто встроенная в нее.

но какая реализация более правильная?

Они ведут себя по-разному, когда передаются объекты, являющиеся экземплярами Boolean класса. Произойдет ли такое когда-нибудь в приложении, которое вы просматриваете? Вероятно, нет. Если они это сделают, только вы будете знать, хотите ли вы рассматривать их как логические значения.

Помимо этого, val === true || val === false имеет тот же эффект, что и typeof val == "boolean" .

Я предполагаю, что это плохая идея «уклоняться» от моей реализации angular.isBoolean ?

Маловероятно, что angular когда-либо сделает это, поэтому вы вряд ли спровоцируете столкновение. Тем не менее, спросите себя: действительно ли это полезно там? Будет ли другой код использовать это? Для более подробного обсуждения взгляните на Не изменяйте объекты, которые вам не принадлежат.