zoukankan      html  css  js  c++  java
  • 枚举属性和不可枚举属性

     

        在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。

    一、怎么判断属性是否可枚举

      js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性:

    1
    2
    3
    4
    var num = new Number();
    for(var pro in num) {
        console.log("num." + pro + " = " + num[pro]);
    }

    它的输出结果会是空。这是因为Number中内置的属性是不可枚举的,所以不能被for…in访问到。

    Object对象的propertyIsEnumerable()方法可以判断此对象是否包含某个属性,并且这个属性是否可枚举。

    需要注意的是:如果判断的属性存在于Object对象的原型内,不管它是否可枚举都会返回false。

    二、枚举性的作用

    属性的枚举性会影响以下三个函数的结果:

    for…in

    Object.keys()

    JSON.stringify

    PropertyIsEnumerable
    propertyIsEnumerable()是用来检测属性是否属于某个对象的,如果检测到了,返回true,否则返回false. 
    1.这个属性必须属于实例的,并且不属于原型. 
    2.这个属性必须是可枚举的,也就是自定义的属性,可以通过for..in循环出来的. 。

     hasOwnProperty(property)
    判断对象是否有某个特定的实例属性。必须用字符串指定该属性

    TheObject.defineProperty()方法定义了一个新的属性直接在一个对象,或修改现有的属性的对象,并返回该对象。

    方法

    Object.defineProperty(obj, prop, descriptor)
    • obj ,待修改的对象
    • prop ,带修改的属性名称
    • descriptor ,待修改属性的相关描述
    复制代码
    {
        configurable: false,
        enumerable: false,
        writable: false,
        value: null,
        set: undefined,
        get: undefined
    }
    复制代码
    1. configurable ,属性是否可配置。可配置的含义包括:是否可以删除属性( delete ),是否可以修改属性的 writable 、 enumerable 、 configurable 属性。
    2. enumerable ,属性是否可枚举。可枚举的含义包括:是否可以通过 for...in 遍历到,是否可以通过 Object.keys() 方法获取属性名称。
    3. writable ,属性是否可重写。可重写的含义包括:是否可以对属性进行重新赋值。
    4. value ,属性的默认值。
    5. set ,属性的重写器(暂且这么叫)。一旦属性被重新赋值,此方法被自动调用。
    6. get ,属性的读取器(暂且这么叫)。一旦属性被访问读取,此方法被自动调用。
  • 相关阅读:
    SQL常见问题及解决备忘
    工厂方法模式-Factory Method
    访问者模式-Visitor
    解释器模式-Interpreter
    享元模式-Flyweight
    系统的重要文件/etc/inittab被删除了--急救办法!
    Database基础(二):MySQL索引创建与删除、 MySQL存储引擎的配置
    轻松解决U盘拷贝文件时提示文件过大问题
    Cisco基础(六):配置目前网络环境、项目阶段练习
    Cisco基础(五):配置静态NAT、配置端口映射、配置动态NAT、PAT配置、办公区Internet的访问
  • 原文地址:https://www.cnblogs.com/luoguixin/p/6251349.html
Copyright © 2011-2022 走看看