Читаю Airbnb JavaScript Style Guide, дохожу до пункта 3.7, где предлагается использовать (как один из хороших (или наилучших) вариантов.
Проверять наличие свойства можно так
const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
console.log(has.call(object, key));
, а можно так
import has from 'has'; // https://www.npmjs.com/package/has
console.log(has(object, key));
Во втором варианте сама проверка на 5 символов меньше, но для этого в проект надо тянуть две библиотеки, первая состоит из 5 строк:
'use strict';
var bind = require('function-bind');
module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);
, две из которых пусты. Она зависит от ещё одной библиотеки в чуть больше 50 строк.
А теперь самая суть, у этого трёхстрочника 15 миллионов загрузок в неделю.
А теперь вопрос: неужто у первого подхода есть какой-то тайный недостаток, вынуждающий тянуть какую-то левую библиотеку? Почему после left-pad такие штуки всё ещё популярны?
А теперь козырь. Я, может, что-то не понимаю, но
const has = function(object, key) {
return Object.prototype.hasOwnProperty.call(object, key);
}
console.log(has(obj, key));
и оно вроде даже работает.