javascript - 对象数据和访问器可配置和可枚举特性默认的不是true吗?
大家讲道理
大家讲道理 2017-06-26 10:58:19
[JavaScript讨论组]
    var book = {};
    
    Object.defineProperties(book, {
        _year: {
            value: 2004
        },
        
        edition: {
            value: 1
        },
        
        year: {            
            get: function(){
                return this._year;
            },
            
            set: function(newValue){
                if (newValue > 2004) {
                    this._year = newValue;
                    this.edition += newValue - 2004;
                }                  
            }            
        }        
    });
       
    var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
    alert(descriptor.value);          //2004
    alert(descriptor.configurable);   //false
    alert(typeof descriptor.get);     //"undefined"
    
    var descriptor = Object.getOwnPropertyDescriptor(book, "year");
    alert(descriptor.value);          //undefined
    alert(descriptor.enumerable);     //false
    alert(typeof descriptor.get);     //"function"
    

    以下这两行看不懂
    alert(descriptor.configurable);   //false
    alert(descriptor.enumerable);     //false
    对象默认的可配置属性和可枚举属性是true吧
    示例代码未设置这两个属性,默认的应该为true吧
    
    PS:红宝书6.1.3(24印143页)
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
黄舟

对象默认的可配置属性和可枚举属性是true吧

这个没错,但是这个指的是不使用defineProperty或者defineProperties的时候,使用它们的时候,那两个属性默认为false

Enumerable properties are those properties whose internal [[Enumerable]] flag is set to true, which is the default for properties created via simple assignment or via a property initializer (properties defined via Object.defineProperty and such default [[Enumerable]] to false).

defineProperties

漂亮男人

这个API手册里面有说明,默认为false。

ringa_lee

红包书上说的是,对于直接在对象上定义的属性,他们默认值为true;类似这样,
`

var book = {
    a: 1   //默认configurable就是ture
}
//以下不同
Object.defineProperty(book,{
    b:{
        value: 5 //为配置configurable,则默认false
    },
    c:{
        value:4,
        configurable: true //有配置,为true
    }
})

`
我抽出了我的红包书,对,他就是说的直接定义在对象上的属性,configurable特性默认为true,不行,你可以输出‘a’,'b','c'的configurable值

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号