Другое решение rm(list=ls(pattern="temp"))
, удалите все объекты, соответствующие шаблону.
Нет никакого простого способа сделать это. Необходимо будет циклично выполниться по свойствам явно:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
Если поддержка ECMAScript 5 доступна, можно использовать Object.keys()
вместо этого:
function isEmpty(obj) {
return Object.keys(obj).length === 0;
}
Просто обходное решение. Ваш сервер может генерировать некоторое специальное свойство в случае никаких данных?
Например:
var a = {empty:true};
Затем можно легко проверить его в код обратного вызова Ajax.
Другой способ проверить его:
if (a.toSource() === "({})") // then 'a' is empty
Править: Если Вы пользуетесь какой-либо библиотекой JSON (f.e. JSON.js) затем можно попробовать JSON.encode (), функционируют и тестируют результат против пустой строки значения.
function isEmpty(obj) {
for(var i in obj) { return false; }
return true;
}
В дополнение к ответу Thevs:
var o = {};
alert($.toJSON(o)=='{}'); // true
var o = {a:1};
alert($.toJSON(o)=='{}'); // false
это jquery + jquery.json
Для тех из вас, у кого такая же проблема, но использует jQuery, вы можете использовать jQuery.isEmptyObject .
let jsObject = JSON.parse(JSON.stringify(obj), (key, value) => {
if (value === null ||
value === '' ||
(value.constructor === Object && Object.entries(value).length === 0) ||
(value.constructor === Array && value.length === 0)) {
return undefined
}
return value
})
Это отфильтрует все недопустимые поля рекурсивно.
Это - похожий способ того, как в нем регистрируются источник lodash для объекта:
const isEmpty = value => {
for (const key in value) {
if (hasOwnProperty.call(value, key)) {
return false
}
}
return true;
}
, Но существует много других способов сделать это.
я думаю первые принятые работы решения в большинстве случаев, но не Отказоустойчивы .
лучше и отказоустойчивое решение будет.
function isEmptyObject() {
return toString.call(obj) === "[object Object]"
&& Object.keys(obj).length === 0;
}
или в ES6/7
const isEmptyObject = () => toString.call(obj) === "[object Object]"
&& Object.keys(obj).length === 0;
С этим подходом, если obj установлен на неопределенный или пустое, код не повреждается. и возвратите пустой указатель.
isEmpty для значения любой тип
/* eslint-disable no-nested-ternary */
const isEmpty = value => {
switch (typeof value) {
case 'undefined':
return true;
case 'object':
return value === null
? true
: Array.isArray(value)
? !value.length
: Object.entries(value).length === 0 && value.constructor === Object;
case 'string':
return !value.length;
default:
return false;
}
};