mozilla
Vos résultats de recherche

    Object.isFrozen()

    Résumé

    La méthode Object.isFrozen()permet de déterminer si un objet est gelé.

    Syntaxe

    Object.isFrozen(obj)

    Paramètres

    obj
    L'objet dont on souhaite vérifier s'il est gelé.

    Description

    Un objet est gelé si et seulement s'il n'est pas extensible, que toutes ses propriétés sont non-configurables et que ses propriétés de données (c'est-à-dire les propriétés qui ne sont pas des accesseurs ou des mutateurs) sont non-accessibles en écriture.

    Exemples

    // Un objet nouvellement créé est extensible et est donc dégelé
    assert(Object.isFrozen({}) === false);
    
    // Un objet vide et non extensible est gelé
    var videGelé = Object.preventExtensions({});
    assert(Object.isFrozen(videGelé) === true);
    
    // Un nouvel objet avec une propriété est extensible et donc dégelé
    var uneProp = { p: 42 };
    assert(Object.isFrozen(uneProp) === false);
    
    // Si on empêche d'étendre un objet non vide, cela ne le rend pas gelé
    // car la propriété est toujours configurable (et accessible en écriture)
    Object.preventExtensions(uneProp);
    assert(Object.isFrozen(uneProp) === false);
    
    // ...si on supprime la seule propriété existante en revanche, on a bien un objet gelé
    delete uneProp.p;
    assert(Object.isFrozen(uneProp) === true);
    
    // Un objet non-extensible et avec une propriété non-accessible en écriture mais toujours configurable
    // n'est pas gelé
    var nonWritable = { e: "plep" };
    Object.preventExtensions(nonWritable);
    Object.defineProperty(nonWritable, "e", { writable: false }); // on la rend non accessible en écriture
    assert(Object.isFrozen(nonWritable) === false);
    
    // Si on rend la propriété non-configurable, l'objet devient gelé
    Object.defineProperty(nonWritable, "e", { configurable: false }); // on la rend non-configurable
    assert(Object.isFrozen(nonWritable) === true);
    
    // Un objet non-extensible avec une propriété non-configurable mais accessible en écriture n'est pas gelé
    var nonConfigurable = { release: "the kraken!" };
    Object.preventExtensions(nonConfigurable);
    Object.defineProperty(nonConfigurable, "release", { configurable: false });
    assert(Object.isFrozen(nonConfigurable) === false);
    
    // Si cette propriété devient non accessible en écriture, l'objet est gelé
    Object.defineProperty(nonConfigurable, "release", { writable: false });
    assert(Object.isFrozen(nonConfigurable) === true);
    
    // Un objet non-extensible avec un accesseur configurable n'est pas gelé
    var accesseur = { get manger() { return "miam"; } };
    Object.preventExtensions(accesseur);
    assert(Object.isFrozen(accesseur) === false);
    
    // ...si on rend la propriété non-configurable, l'objet est gelé.
    Object.defineProperty(accesseur, "manger", { configurable: false });
    assert(Object.isFrozen(accesseur) === true);
    
    // La façon la plus simple est d'utiliser la méthode Object.freeze
    var gelé = { 1: 81 };
    assert(Object.isFrozen(gelé) === false);
    Object.freeze(gelé);
    assert(Object.isFrozen(gelé) === true);
    
    // Par définition, un objet gelé est non-extensible.
    assert(Object.isExtensible(gelé) === false);
    
    // Par définition, un objet gelé est scellé.
    assert(Object.isSealed(gelé) === true);
    

    Notes

    Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais est d'un autre type primitif), cela entraînera une exception TypeError. Pour ES6, un argument qui n'est pas un objet sera traité comme s'il était un objet gelé et la méthode renverra true.

    > Object.isFrozen(1)
    TypeError: 1 n'est pas un objet // code ES5
    
    > Object.isFrozen(1)
    true                          // code ES6
    

    Spécifications

    Spécification Statut Commentaires
    ECMAScript 5.1 (ECMA-262)
    La définition de 'Object.isFrozen' dans cette spécification.
    Standard Définition initiale. Implémentée par JavaScript 1.8.5.
    ECMAScript 6 (ECMA-262)
    La définition de 'Object.isFrozen' dans cette spécification.
    Draft  

    Compatibilité des navigateurs

    Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support simple 6 4.0 (2.0) 9 12 5.1
    Fonctionnalité Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support simple ? ? ? ? ? ?

    Tableau basé sur le tableau de compatibilité de Kangax.

    Voir aussi

    Étiquettes et contributeurs liés au document

    Contributors to this page: SphinxKnight
    Dernière mise à jour par : SphinxKnight,