阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS object propertyIsEnumerable()

      **propertyIsEnumerable()** 方法返回一个布尔值,表示指定的属性是否可枚举。

      语法

      obj.propertyIsEnumerable(prop)
      

      参数

      prop

      需要测试的属性名。

      返回值

      用来表示指定的属性名是否可枚举的Boolean

      描述

      每个对象都有一个propertyIsEnumerable方法。此方法可以确定对象中指定的属性是否可以被for...in循环枚举,但是通过原型链继承的属性除外。如果对象没有指定的属性,则此方法返回false

      例子

      propertyIsEnumerable方法的基本用法

      下面的例子演示了propertyIsEnumerable方法在普通对象和数组上的基本用法:

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

      用户自定义对象和引擎内置对象

      下面的例子演示了用户自定义对象和引擎内置对象上属性可枚举性的区别.

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

      自身属性和继承属性

      var a = [];
      a.propertyIsEnumerable('constructor');         // 返回 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');   // 返回 true
      o.propertyIsEnumerable('method');              // 返回 true
      o.propertyIsEnumerable('property');            // 返回 false
      
      o.property = 'is enumerable';
      
      o.propertyIsEnumerable('property');            // 返回 true
      
      // 这些返回fasle,是因为,在原型链上propertyIsEnumerable不被考虑
      // (尽管最后两个在for-in循环中可以被循环出来)。
      o.propertyIsEnumerable('prototype');   // 返回 false (根据 JS 1.8.1/FF3.6)
      o.propertyIsEnumerable('constructor'); // 返回 false
      o.propertyIsEnumerable('firstMethod'); // 返回 false
      

      规范

      SpecificationStatusComment
      ECMAScript 3rd Edition (ECMA-262)StandardInitial definition
      ECMAScript 5.1 (ECMA-262) Object.prototype.propertyIsEnumerableStandard 
      ECMAScript 2015 (6th Edition, ECMA-262)Object.prototype.propertyIsEnumerableStandard 
      ECMAScript Latest Draft (ECMA-262)Object.prototype.propertyIsEnumerableDraft 

      相关链接

      目录
      目录