530 votes

L'objet est-il vide?

Quel est le moyen le plus rapide de vérifier si un objet est vide ou non?

Y a-t-il un moyen plus rapide et meilleur que celui-ci:

 function count_obj(obj){
    var i = 0;
    for(var key in obj){
        ++i;
    }

    return i;
}
 

649voto

Jakob Points 11155

Pour ECMAScript5 (pas encore pris en charge dans tous les navigateurs), vous pouvez utiliser:

 Object.keys(obj).length === 0
 

463voto

Sean Vieira Points 47080

Je suis en supposant que par le vide que tu veux dire "n'a pas de propriétés qui lui sont propres".

// Speed up calls to hasOwnProperty
var hasOwnProperty = Object.prototype.hasOwnProperty;

function isEmpty(obj) {

    // null and undefined are "empty"
    if (obj == null) return true;

    // Assume if it has a length property with a non-zero value
    // that that property is correct.
    if (obj.length > 0)    return false;
    if (obj.length === 0)  return true;

    // Otherwise, does it have any properties of its own?
    // Note that this doesn't handle
    // toString and valueOf enumeration bugs in IE < 9
    for (var key in obj) {
        if (hasOwnProperty.call(obj, key)) return false;
    }

    return true;
}

Exemples:

isEmpty(""), // true
isEmpty([]), // true
isEmpty({}), // true
isEmpty({length: 0, custom_property: []}), // true

isEmpty("Hello"), // false
isEmpty([1,2,3]), // false
isEmpty({test: 1}), // false
isEmpty({length: 3, custom_property: [1,2,3]}) // false

Si vous avez seulement besoin de gérer ECMAScript5 navigateurs, vous pouvez utiliser Object.getOwnPropertyNames , au lieu de l' hasOwnProperty boucle:

if (Object.getOwnPropertyNames(obj).length > 0) return false;

Cela permettra d'assurer que, même si l'objet a seulement non énumérable propriétés isEmpty sera encore de vous donner des résultats corrects.

226voto

johndodo Points 2975

Moyen efficace et multinavigateur est à l’aide de `` :

Plus : http://api.jquery.com/jQuery.isEmptyObject/

Vous devez cependant jquery.

101voto

Brad Koch Points 4046

IsEmpty() du trait de soulignement est pratique, si vous ne me dérange pas ajouter une bibliothèque supplémentaire.

23voto

Šime Vidas Points 59994
function isEmpty( o ) {
    for ( var p in o ) { 
        if ( o.hasOwnProperty( p ) ) { return false; }
    }
    return true;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X