#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 когда-либо сделает это, поэтому вы вряд ли спровоцируете столкновение. Тем не менее, спросите себя: действительно ли это полезно там? Будет ли другой код использовать это? Для более подробного обсуждения взгляните на Не изменяйте объекты, которые вам не принадлежат.