mozilla
Your Search Results

    Object.prototype.propertyIsEnumerable()

    Summary

    The propertyIsEnumerable() method returns a Boolean indicating whether the specified property is enumerable.

    Syntax

    obj.propertyIsEnumerable(prop)

    Parameters

    prop
    The name of the property to test.

    Description

    Every object has a propertyIsEnumerable method. This method can determine whether the specified property in an object can be enumerated by a for...in loop, with the exception of properties inherited through the prototype chain. If the object does not have the specified property, this method returns false.

    Examples

    Example: A basic use of propertyIsEnumerable

    The following example shows the use of propertyIsEnumerable on objects and arrays:

    var o = {};
    var a = [];
    o.prop = 'is enumerable';
    a[0] = 'is enumerable';
    
    o.propertyIsEnumerable('prop');   // returns true
    a.propertyIsEnumerable(0);        // returns true
    

    Example: User-defined versus built-in objects

    The following example demonstrates the enumerability of user-defined versus built-in properties:

    var a = ['is enumerable'];
    
    a.propertyIsEnumerable(0);          // returns true
    a.propertyIsEnumerable('length');   // returns false
    
    Math.propertyIsEnumerable('random');   // returns false
    this.propertyIsEnumerable('Math');     // returns false
    

    Example: Direct versus inherited properties

    var a = [];
    a.propertyIsEnumerable('constructor');         // returns false
    
    function firstConstructor() {
      this.property = 'is not enumerable';
    }
    
    firstConstructor.prototype.firstMethod = function() {};
    
    function secondConstructor() {
      this.method = function method() { return 'is enumerable'; };
    }
    
    secondConstructor.prototype = new firstConstructor;
    secondConstructor.prototype.constructor = secondConstructor;
    
    var o = new secondConstructor();
    o.arbitraryProperty = 'is enumerable';
    
    o.propertyIsEnumerable('arbitraryProperty');   // returns true
    o.propertyIsEnumerable('method');              // returns true
    o.propertyIsEnumerable('property');            // returns false
    
    o.property = 'is enumerable';
    
    o.propertyIsEnumerable('property');            // returns true
    
    // These return false as they are on the prototype which 
    // propertyIsEnumerable does not consider (even though the last two
    // are iteratable with for-in)
    o.propertyIsEnumerable('prototype');   // returns false (as of JS 1.8.1/FF3.6)
    o.propertyIsEnumerable('constructor'); // returns false
    o.propertyIsEnumerable('firstMethod'); // returns false
    

    Specifications

    Specification Status Comment
    ECMAScript 3rd Edition. Standard Initial definition.
    ECMAScript 5.1 (ECMA-262)
    The definition of 'Object.prototype.propertyIsEnumerable' in that specification.
    Standard  
    ECMAScript 2015 (6th Edition, ECMA-262)
    The definition of 'Object.prototype.propertyIsEnumerable' in that specification.
    Standard  

    Browser compatibility

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
    Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

    Gecko-specific notes

    Starting in JavaScript 1.8.1 (in Firefox 3.6), propertyIsEnumerable('prototype') returns false instead of true; this makes the result compliant with ECMAScript 5.

    See also

    Document Tags and Contributors

    Last updated by: Mingun,