Другой альтернативой является использование is.js (14 КБ) вместо jquery (32 КБ), lodash (50 КБ) или подчеркивания (16,4 КБ). is.js оказалась самой быстрой библиотекой среди вышеупомянутых библиотек, которую можно использовать для определения, является ли объект пустым.
http://jsperf.com/check-empty-object-using-libraries
Очевидно, что все эти библиотеки не совсем одинаковы, поэтому, если вам нужно легко манипулировать DOM, тогда jquery может быть хорошим выбором или если вам нужно больше, чем просто проверка типов, тогда lodash или подчеркивание может быть хорошим. Что касается is.js , вот синтаксис:
var a = {};
is.empty(a); // true
is.empty({"hello": "world"}) // false
Как и символы подчеркивания и Лодаша _.isObject()
, это не только для objects
, но также относится к arrays
и strings
.
Под капотом эта библиотека использует Object.getOwnPropertyNames
, что похоже на Object.keys
, но Object.getOwnPropertyNames
является более тщательным, поскольку она возвратит перечисляемые и не перечисляемые свойства, как описано здесь .
is.empty = function(value) {
if(is.object(value)){
var num = Object.getOwnPropertyNames(value).length;
if(num === 0 || (num === 1 && is.array(value)) || (num === 2 && is.arguments(value))){
return true;
}
return false;
} else {
return value === '';
}
};
Если вы не хотите вводить библиотеку (что понятно) и знаете, что вы проверяете только объекты (не массивы или строки), тогда следующая функция должна соответствовать вашим потребностям.
function isEmptyObject( obj ) {
return Object.getOwnPropertyNames(obj).length === 0;
}
Это только немного быстрее, чем is.js, хотя только потому, что вы не проверяете, является ли он объектом.