comment vérifier si l'objet json est vide


Réponse 1:

Le moyen le plus rapide et le plus simple:

function isEmpty (obj) { for (var prop dans obj) { retourner faux; } retourne vrai; }

Voici les tests unitaires:

http://code.bocoup.com/isempty-unit/test/

Test de performance

http://jsperf.com/methods-to-test-empty-objects

MODIFIER (2013-01-05):

L'approche ci-dessus échouera s'il existe des propriétés propres non énumérables:

function isEmptyA (obj) { for (var prop dans obj) { retourner faux; } retourne vrai; }// Aussi...function isEmptyB (obj) { return Object.keys (obj) .length === 0;}var o = {};Object.defineProperty (o, "toto", { value: "Cette propriété n'est pas énumérable, donc Object.keys () et for-in la manqueront.", énumérable: faux });console.log (isEmptyA (o)); // vraiconsole.log (isEmptyB (o)); // vrai

... Mais l'objet n'est clairement pas vide. Object.getOwnPropertyNames (o) comprendra des propriétés non énumérables:

Object.getOwnPropertyNames (o);// ["toto"]

Réponse 2:

La chose correcte la plus simple à laquelle je puisse penser est:

var isEmpty = function (obj) { var p; for (p dans obj) { if (obj.hasOwnProperty (p)) { retourner faux; } } retourne vrai;};

mais cela semble bien plus compliqué que cela ne devrait l'être. Je ne suis pas non plus absolument certain que ce soit exact.


Réponse 3:

Si vous êtes dans un environnement convivial (ie8 + ou quelque chose de décent), vous n'avez pas besoin de trop de performances, vous pouvez même retourner JSON.stringify (obj) === JSON.stringify ({}); Vous voudrez peut-être être prudent dans le cas où votre objet contient une méthode.