Як перевірити порожній JavaScript-об’єкт?


3106

Після запиту AJAX іноді моя програма може повернути порожній об'єкт, наприклад:

var a = {};

Як я можу перевірити, чи так це?


7
Чи використовуєте ви сценарій JSON.js? Або будь-яку іншу бібліотеку JSON. Тоді ви можете скористатися функцією JSON.encode (), щоб перетворити var у рядок, а потім перевірити його.
Thevs

if( Object.entries(a).length > 0){ //do }
Мухаммед Шахзад

Відповіді:


5416

ECMA 5+ :

// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object

Зауважте, що це створює непотрібний масив (повернене значення keys).

Попередньо ECMA 5:

function isEmpty(obj) {
  for(var prop in obj) {
    if(obj.hasOwnProperty(prop)) {
      return false;
    }
  }

  return JSON.stringify(obj) === JSON.stringify({});
}

jQuery :

jQuery.isEmptyObject({}); // true

lodash :

_.isEmpty({}); // true

Підкреслення :

_.isEmpty({}); // true

Гак

Hoek.deepEqual({}, {}); // true

ExtJS

Ext.Object.isEmpty({}); // true

AngularJS (версія 1)

angular.equals({}, {}); // true

Рамда

R.isEmpty({}); // true

22
Ось тест продуктивності між Jquery і підкреслення jsperf.com/isempty-vs-isemptyobject/6
Михайло

20
Object.keys(new Date()).length === 0; тому ця відповідь може бути оманливою.
cjbarth

6
Замість того , щоб stringifying речі , які ви також можете скористатися цим фактом: (new Date()).constructor === Dateабо , навпаки, ({}).constructor === Object.
Джон Нельсон

2
angular.equals ({}, {});
Джеремі А. Захід

11
Object.keys()не перевіряє незліченні властивості чи символи. Вам потрібно використовувати Object.getOwnPropertyNames()і Object.getOwnPropertySymbols()замість цього. Також, Object.getPrototypeOf()це правильний спосіб отримати прототип об'єкта. obj.constructorможна легко підробити. Приклад: function Foo() {} Foo.prototype.constructor = Object; (new Foo()).constructor === Object // true.
Джессі

862

Немає простого способу зробити це. Вам доведеться чітко переглядати властивості:

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;
}

56
Це працює добре, або простіше: функція isEmpty (object) {for (var i in object) {return true; } повернути помилкове; }
Ніколас Крейдберг

36
Чи не слід в цій функції змінювати істинне та хибне?
намтакс

25
@namtax: ні - функція названа isEmpty(), тому вона повинна повертатися, falseякщо вона має властивість
Крістоф

6
порожній об'єкт розширить клас об'єкта за замовчуванням, але якщо прототип об'єкта буде змінено, ваша спрощена функція не буде розглядати: Object.prototype.a = 'привіт'; var obj = {}; оповіщення (obj.a); // виводить "привіт" isEmpty (obj) // повертає false
venimus

29
Не слід використовувати другий приклад, оскільки це складність у часі O (n) та складність простору O (n), тоді як перший - O (1).
Брайан

572

Для тих, хто має таку ж проблему, але використовує jQuery, ви можете використовувати jQuery.isEmptyObject .


43
ВАЙ! Я лише витратив кілька годин на налагодження проблем IE 8, щоб виявити, що саме jQuery.isEmptyObject викликав проблему. Він повертає істину, якщо об’єкт порожній.
MFD3000

162
Чому ви публікуєте відповідь, включаючи jQuery, якщо питання взагалі не стосується jQuery?
Еру

47
Я знаю його старий коментар, але мені цікаво ваше запитання @ MFD3000, тому що docu каже: повертає true, якщо об’єкт порожній (як зазначено в назві)
Александр Фишер

21
включаючи jQuery для такого основного завдання - це не те, що я б назвав правильною відповіддю. Це правда, що в даний час jQuery майже всюдисущий, але все ж не слід забувати, що він побудований навколо самої здібної мови.
Пабло Мешер

54
Типовий снобізм JS в цих коментарях. Всім відомо, що величезна частка JavaScript в Інтернеті написана на jQuery, тому цілком прийнятно запропонувати тут рішення для jQuery, якщо у нього вже є вбудований метод тестування об'єктів. Ймовірно, що тисячі розробників, які шукають допомоги, знайдуть цю відповідь корисною. Ніхто не сказав, що це єдиний спосіб зробити це. Я помічаю, як ніхто не діє з усією елітарністю щодо хлопця, який опублікував рішення про використання underscore.js...
BadHorsie

276

Це моє бажане рішення:

var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty

1
Проблема сумісності з IE9 BTW. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
doublejosh

3
@Jero Franzani: ні це не так
nikoskip

Довжина Object.keys ({}). В 10 разів повільніше, ніж опція (for ... in ...) - я пропоную уникати цього як способу перевірити, чи objetc порожній.
davidhadas

10
Object.keys(new Date()).length === 0; тому ця відповідь може бути оманливою.
cjbarth

new Date()не є об’єктом. nd = new Date(); nd.constructor === Object;результати в false.
pors

204

Ви можете використовувати Underscore.js .

_.isEmpty({}); // true

19
Або ви можете використовувати lodash порожній ( lodash.com/docs#isEmpty ), але чим це відрізняється від використання рішення jQuery - вам все одно потрібно встановити додаткову бібліотеку. Я думаю, що рішення ванільного javascript є наміром.
tfmontague

10
Це інакше, якщо ви хочете використовувати JS на бекенді з Node.js. Мало хто захоче використовувати jQuery (фронтальна бібліотека, яка використовується в основному для маніпуляцій з DOM) на бекенді.
Нан

3
@tfmontague Підкреслення дуже часто зустрічається у додатках із вузлами, майже настільки ж всюдисущим, як jQ на стороні клієнта. У мене вже було потрібне підкреслення, але я не усвідомлював, що це функція
rw-nandemo

5
Підкреслення замінюється лодашем. Використовуйте це замість цього.
demisx

2
Будьте обережні з типами дат, isEmpty завжди повертає істину для Date, див. Github.com/jashkenas/underscore/isissue/445
mentat

116
if(Object.getOwnPropertyNames(obj).length === 0){
  //is empty
}

див. http://bencollier.net/2011/04/javascript-is-an-object-empty/


5
Сюди входять неперелічені властивості, якщо ви небайдужі.

Довжина Object.getOwnPropertyNames ({}) в 10 разів повільніше, ніж опція (для ... в ...) - я пропоную уникати цього як способу перевірити, чи не є objetc порожнім.
davidhadas

4
Object.getOwnPropertyNames(new Date()).length === 0; тому ця відповідь може бути оманливою.
cjbarth

80

Як щодо використання JSON.stringify? Він майже доступний у всіх сучасних браузерах.

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

23
повернення (JSON.stringify (obj) == '{}')
Вік

26
Це повільно і швидкість має значення для цього виду утиліти. Швидкий тест на Perf

1
Це дуже повільний варіант - я пропоную замість цього
скористатися

2
І це не працює для об'єктів, що містять функції.
Фелікс Клінг

1
Він також призведе до помилки, якщо в об’єкті є кругла посилання. Тож це повільно, ненадійно і може кидати помилки та порушувати все інше. Немає причин використовувати його ніколи.
Бурак

62

Я просто зіткнувся з подібною ситуацією. Я не хотів використовувати JQuery, і хотів це зробити за допомогою чистого Javascript.

І те, що я зробив, використав наступну умову, і це працювало на мене.

var obj = {};
if(JSON.stringify(obj) === '{}') { //This will check if the object is empty
   //Code here..
}

Використовуйте це: JSON.stringify(obj) !== '{}'

Перевірте цей JSFiddle


4
Не вдасться для об'єктів із циркулярними посиланнями, оскільки JSON.stringify спеціально викидає для них виключення.
Педро Монтото Гарсія

1
@ PedroMontotoGarcía Добре, і як порожній об’єкт матиме круговий посилання?
KthProg

8
Якщо об’єкт не порожній (і він також повинен працювати для них).
Педро Монтото Гарсія

Здається, це вже згадувалося @Ateszki і є одним із найповільніших способів перевірити, чи об’єкт не порожній.
cwadding

О так .. я пропустив це. Я зіткнувся з ситуацією, коли хотів досягти цього javascript, і трохи подумавши, я зрозумів це. @Ateszki, Навіть я, як і ти. :-) Btw, на це було багато відповідей, і тому я пропустив вашу відповідь.
Аніш Наїр

60

Старе запитання, але просто виникло питання. Включення JQuery насправді не є хорошою ідеєю, якщо ваша єдина мета - перевірити, чи об’єкт не порожній. Натомість просто заглибившись у код JQuery , і ви отримаєте відповідь:

function isEmptyObject(obj) {
    var name;
    for (name in obj) {
        if (obj.hasOwnProperty(name)) {
            return false;
        }
    }
    return true;
}

5
Це корисно лише в тому випадку, якщо якийсь інший процес не додав прототип до базового об’єкта. Щоб зробити це по-справжньому працездатним, вам потрібно пройти тест на obj.hasOwnProperty (name)
mpemburn

1
Це нічого не додає до відповіді Крістофа з 2009 року.
Дан Даскалеску

39

Існує простий спосіб, якщо ви перебуваєте в новому браузері. Object.keys(obj).length == 0


1
Звідки береться keysмайно?


1
Як вищезгаданий коментар може мати 4 оновлення? Так, Object.keysце стандартний метод, але об'єкти не мають властивості ключів. Таким чином, цей код повідомляє про будь-який об’єкт порожнім, за винятком випадкових випадків, коли він має властивість з ім'ям, яке keyмає значення, яке знову називається властивістю, lengthяке не має нуля. Жахливо!
scray

Object.keys(new Date()).length === 0; тому ця відповідь може бути оманливою.
cjbarth

11
@scravy Object - клас Object. Об'єкт має статичний метод з назвою "ключі", який приймає об'єкт як аргумент. Цей метод повертає масив рядків, де рядки є іменами властивостей. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Sgnl

33

Використання Object.keys (obj) .length (як запропоновано вище для ECMA 5+) у 10 разів повільніше для порожніх об'єктів! тримайся зі старої школи (для ... в) варіант.

Перевірено під Node, Chrome, Firefox та IE 9, стає очевидним, що для більшості випадків використання:

  • (для ... в ...) - це найшвидший варіант використання!
  • Для порожніх об’єктів довжина Object.keys (obj). В 10 разів повільніше
  • JSON.stringify (obj). Довжина завжди найповільніша (не дивовижна)
  • Object.getOwnPropertyNames (obj) .length займає більше часу, ніж Object.keys (obj) .length може бути набагато довшим у деяких системах.

Підсумкові результати роботи:

function isEmpty(obj) { 
   for (var x in obj) { return false; }
   return true;
}

або

function isEmpty(obj) {
   for (var x in obj) { if (obj.hasOwnProperty(x))  return false; }
   return true;
}

Дивіться детальні результати тестування та код тесту на сторінці Чи об’єкт порожній?


Object.keysповільно, але менше коду. На невеликій сторінці, де це називається ... можливо в 10 разів ... Чи все ж це буде повільніше, враховуючи час розбору додаткового коду?
янкі

33

Продуктивність

Сьогодні 2020.01.17 я виконую тести на MacOs HighSierra 10.13.6 на Chrome v79.0, Safari v13.0.4 та Firefox v72.0, для обраних рішень.

Висновки

  • рішення на основі for-in(A, J, L, M) найшвидші
  • рішення на основі JSON.stringify(В, К) повільні
  • на диво також рішення на основі Object(N) повільне

введіть тут опис зображення

Деталі

Нижче в фрагменті представлено 15 рішень. Якщо ви хочете запустити перевірку працездатності на своєму апараті, натисніть ТУТ .

введіть тут опис зображення


багато цього не має сенсу, тому що ви базуєте все на поверненні неправдивого або істинного. Іноді для програмування потрібен оператор if або термінальний оператор. просто фій
Крістіан Матвій

Це найкраща відповідь, дякую, перше рішення працює як принадність
Карлос Ісус Arancibia Taborga

32

Ви можете перевірити кількість ключів об'єкта:

if (Object.keys(a).length > 0) {
    // not empty
}

8
Чому б ви додали коментар до відповіді, яка вже була дана, і дати гіршу відповідь? stackoverflow.com/a/32108184/4229159, і це перша відповідь з квітня
Алехандро Валес

Як якщо у мене дуже великий об'єкт і зробити це на кожному циклі, щоб побачити, чи об’єкт порожній?
StefansArya

27
  1. Просто вирішення. Чи може ваш сервер генерувати якусь особливу властивість у випадку відсутності даних?

    Наприклад:

    var a = {empty:true};

    Тоді ви можете легко перевірити це у своєму коді зворотного дзвінка AJAX.

  2. Ще один спосіб перевірити це:

    if (a.toSource() === "({})")  // then 'a' is empty

EDIT : Якщо ви використовуєте будь-яку бібліотеку JSON (fe JSON.js), ви можете спробувати функцію JSON.encode () і перевірити результат на порожній рядок значення.


6
toSource()є нестандартним і не працює в IE або Opera (і, можливо, інших браузерах я не перевіряв)
Крістоф

4
@Thevs: можливо, у вас є інша копія поточної версії ECMA-262, але моя не перераховує toSourceвластивість у розділі 15.2.4; згідно MDC, він був представлений в JS1.3 (тобто Netscape Navigator 4.06), але це НЕ в ECMA-262, 3-е видання!
Крістоф

4
@Thevs: ну, принаймні 2 важливі постачальники браузерів не реалізували його, тому навряд чи це є де-факто стандартом, а оскільки його немає в ECMA-262, він не є реальним ...
Крістоф,

4
Навіть коли це працює, toSource()це жахливий спосіб зробити це (як є JSON.encode()). Для цього потрібно створити рядок, що представляє весь ваш об'єкт, щоб просто перевірити, чи порожній він. Існує накладні витрати на перетворення речей у рядки, але крім того, для конвертації мільйона речей, якщо ваш об’єкт має мільйон властивостей, потрібно буде, а насправді лише дивлячись на один, ви дасте зрозуміти, що він не порожній.
Джаспер

4
@Черезкладніші накладні витрати, навіть якщо це може бути (я не впевнений, що це при будь-яких обставинах) в тому ж порядку. Однак ця відповідь передбачає повернення неправдивих, як тільки знайдеться інша властивість, яка робить історію різною всі разом ...
Джаспер

25

Я створив повну функцію, щоб визначити, чи об’єкт порожній.

Він використовує Object.keysз ECMAScript 5 (ES5) функціональності , якщо це можливо , щоб досягти максимальної продуктивності (див таблицю сумісності ) та резервні оголошення до найбільш сумісний підхід для старіших двигунів (браузери).

Рішення

/**
 * Returns true if specified object has no properties,
 * false otherwise.
 *
 * @param {object} object
 * @returns {boolean}
 */
function isObjectEmpty(object)
{
    if ('object' !== typeof object) {
        throw new Error('Object must be specified.');
    }

    if (null === object) {
        return true;
    }

    if ('undefined' !== Object.keys) {
        // Using ECMAScript 5 feature.
        return (0 === Object.keys(object).length);
    } else {
        // Using legacy compatibility mode.
        for (var key in object) {
            if (object.hasOwnProperty(key)) {
                return false;
            }
        }
        return true;
    }
}

Ось істота цього коду.

І ось JSFiddle з демонстрацією та простим тестом.

Сподіваюся, це комусь допоможе. Ура!


3
Це не вдається для nullоб'єкта.

Привіт @torazaburo! Дякуємо за повідомлення! Я оновив усі джерела з правильним виконанням.
Слава Фомін II,

1
Довжина Object.keys ({}). В 10 разів повільніше, ніж опція (for ... in ...) - я пропоную уникати цього як способу перевірити, чи objetc порожній.
davidhadas

1
Object.keys(new Date()).length === 0; тому ця відповідь може бути оманливою.
cjbarth

19

Я цим користуюся.

function isObjectEmpty(object) {
  var isEmpty = true;
  for (keys in object) {
     isEmpty = false;
     break; // exiting since we found that the object is not empty
  }
  return isEmpty;
}

Наприклад:

var myObject = {}; // Object is empty
var isEmpty  = isObjectEmpty(myObject); // will return true;

// populating the object
myObject = {"name":"John Smith","Address":"Kochi, Kerala"}; 

// check if the object is empty
isEmpty  = isObjectEmpty(myObject); // will return false;

звідси

Оновлення

АБО

ви можете використовувати jQuery реалізацію isEmptyObject

function isEmptyObject(obj) {
  var name;
  for (name in obj) {
    return false;
  }
  return true;
}

Привіт. коли ви перевіряєте цю функцію з числом або булевим істинним або помилковим поверненням істинним, і це невірний результат. isObjectEmpty (вірно). isObjectEmpty (помилково). isObjectEmpty (1)
iman

2
Ми перевіряємо, чи об’єкт порожній, ні, якщо тип даних є об’єктом. У вашому випадку, щоб перевірити, чи є його об'єктом, нам потрібно щось на зразок if (typeof a === "object") {...}
kiranvj

15

Наведений нижче приклад показує, як перевірити, чи об’єкт JavaScript порожній, якщо під порожнім ми означає, що він не має до нього власних властивостей.

Сценарій працює на ES6.

const isEmpty = (obj) => {
    if (obj === null ||
        obj === undefined ||
        Array.isArray(obj) ||
        typeof obj !== 'object'
    ) {
        return true;
    }
    return Object.getOwnPropertyNames(obj).length === 0;
};
console.clear();
console.log('-----');
console.log(isEmpty(''));           // true
console.log(isEmpty(33));           // true
console.log(isEmpty([]));           // true
console.log(isEmpty({}));           // true
console.log(isEmpty({ length: 0, custom_property: [] })); // false
console.log('-----');
console.log(isEmpty('Hello'));      // true
console.log(isEmpty([1, 2, 3]));    // true
console.log(isEmpty({ test: 1 }));  // false
console.log(isEmpty({ length: 3, custom_property: [1, 2, 3] })); // false
console.log('-----');
console.log(isEmpty(new Date()));   // true
console.log(isEmpty(Infinity));     // true
console.log(isEmpty(null));         // true
console.log(isEmpty(undefined));    // true


15

Відповідно до специфікації ES2017 для Object.entries () , перевірка проста за допомогою будь-якого сучасного браузера--

Object.entries({}).length === 0

3
Чи є якась користь від використання цього над Object.keysабо Object.values?
фансигнал

@faintsignal, використовуючи ці, цілком чудово. Я просто додав записи, оскільки не знайшов їх у коментарях.
Вікрант

13
function isEmpty(obj) {
  for(var i in obj) { return false; }
  return true;
}

4
Це буде також вірно, коли, наприклад, бібліотека JavaScript розширюється Objectметодом через прототип ланцюга, тому що це перелічується, а for inоператор проходить через численні властивості.
viam0Zah

12

jQuery мають спеціальну функцію isEmptyObject()для цього випадку:

jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false

Детальніше читайте на http://api.jquery.com/jQuery.isEmptyObject/


12

Я б хотів перевірити, чи є у нього хоча б один ключ. Цього було б достатньо, щоб сказати мені, що це не порожньо.

typeof obj !== "undefined" && Boolean(Object.keys(obj)[0])

1
що робити, якщо перший ключ повертає falseзначення? результат буде falseневірним.
Jimmy Obonyo Abor

Я тестував на це. Чи можете ви навести робочий приклад?
Тюдор Морар

1
це коротко і стисло, але призведе до помилки під час виконання, якщо Об’єкт не визначений
Mrinmoy

11

Під кришкою всі порожні методи перевірки у всіх бібліотеках використовують об'єктивні ключі перевірки логіки. Це незвичайний спосіб зробити його зрозумілим, який ви можете вкласти методом, описаним тут .

for(key in obj){
   //your work here.
 break;
}

Що розвинулося в ES5 , тепер просто ви можете перевірити довжину ключів об'єкта, використовуючи Object.Keysметод, який приймає ваш об'єкт як його параметр:

if(Object.keys(obj).length > 0){
 //do your work here
}

Або якщо ви використовуєте Lodash (ви повинні бути).

 _.isEmpty(obj) //==true or false

Хоча це правильно, як дивний спосіб зробити if-операцію - це, ймовірно, заплутає когось, хто буде підтримувати код після вас.
Сорен

10


ви можете використовувати цей простий код, який не використовував jQuery або інші бібліотеки

var a=({});

//check is an empty object
if(JSON.stringify(a)=='{}') {
    alert('it is empty');
} else {
    alert('it is not empty');
}

Клас JSON та його функції ( синтаксичний аналіз та поглинання ) дуже корисні, але є деякі проблеми з IE7, які ви можете виправити за допомогою цього простого коду http://www.json.org/js.html .

Інший простий спосіб (найпростіший спосіб):
ви можете використовувати цей спосіб, не використовуючи jQuery або JSON- об'єкт.

var a=({});

function isEmptyObject(obj) {
    if(typeof obj!='object') {
        //it is not object, so is not empty
        return false;
    } else {
        var x,i=0;
        for(x in obj) {
            i++;
        }
        if(i>0) {
            //this object has some properties or methods
            return false;
        } else {
            //this object has not any property or method
            return true;
        }
    }
}

alert(isEmptyObject(a));    //true is alerted

JSON.stringifyрішення не вдається, якщо об'єкт містить нестрифіковані властивості, такі як функції або "невизначені", хоча це надано кращим випадком.

10

Найкращий спосіб, який я знайшов:

function isEmpty(obj)
{
    if (!obj)
    {
        return true;
    }

    if (!(typeof(obj) === 'number') && !Object.keys(obj).length)
    {
        return true;
    }

    return false;
}

Працює для:

    t1: {} -> true
    t2: {0:1} -: false
    t3: [] -> true
    t4: [2] -> false
    t5: null -> true
    t6: undefined -> true
    t7: "" -> true
    t8: "a" -> false
    t9: 0 -> true
    t10: 1 -> false

3
Я б сказав, що 0 не порожній, оскільки це насправді число. все інше виглядає добре, але виправити це легко. у першому, якщо заява додасть це. if (!obj && obj !== 0).
mjwrazor

9

Приймаю:

function isEmpty(obj) {
    return !Object.keys(obj).length > 0;
}

var a = {a:1, b:2}
var b = {}

console.log(isEmpty(a)); // false
console.log(isEmpty(b)); // true

Просто я не думаю, що зараз усі браузери реалізовують Object.keys().


2
Object.keys(new Date()).length === 0; тому ця відповідь може бути оманливою.
cjbarth

3
Залежить, якщо ви вважаєте, що побачення завжди є "повним", незважаючи на те, що ніколи не показувати ключі. Але я погоджуюсь, що якщо це ваш план, додавання додаткових екземплярів перевірки на конструктор дат є хорошим варіантом.
NiKo

9

Якщо jQuery і веб-браузер недоступні, в underscore.js також є функція isEmpty.

_.isEmpty({}) // returns true

Крім того, він не передбачає, що вхідний параметр є об'єктом. Для списку або рядка або невизначеного, він також поверне правильну відповідь.



7

Кава! Остерігайтеся обмежень JSON.

javascript:
  obj={  f:function(){}  };
  alert( "Beware!! obj is NOT empty!\n\nobj = {  f:function(){}  }" + 
               "\n\nJSON.stringify( obj )\n\nreturns\n\n" +
                        JSON.stringify( obj ) );

дисплеї

    Обережно !! obj НЕ порожній!

    obj = {f: function () {}}

    JSON.stringify (obj)

    повертає

    {}

7

Правильна відповідь:

const isEmptyObject = obj =>
  Object.getOwnPropertyNames(obj).length === 0 &&
  Object.getOwnPropertySymbols(obj).length === 0 &&
  Object.getPrototypeOf(obj) === Object.prototype;

Це перевіряє, що:

  • Об'єкт не має власних властивостей (незалежно від перелічуваності).
  • Об'єкт не має власних символів властивості.
  • Прототип об'єкта є саме таким Object.prototype.

Іншими словами, об’єкт не відрізняється від створеного с {}.


6

Окрім відповіді Thevs:

var o = {};
alert($.toJSON(o)=='{}'); // true

var o = {a:1};
alert($.toJSON(o)=='{}'); // false

це jquery + jquery.json


Мені не подобається використовувати JSON, тому що він не може працювати з круговими об'єктними структурами.
itdoesntwork

2
Якщо ваша сторінка завантажує jQuery, тоді використовуйте $.isEmptyObject(), не витрачайте цикли на неочевидні перетворення.
лижник

6

Sugar.JS забезпечує розширені об'єкти для цієї мети. Код чистий і простий:

Зробіть розширений об’єкт:

a = Object.extended({})

Перевірте розмір:

a.size()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.