javascript - 对象数据和访问器可配置和可枚举特性默认的不是true吗?
问题描述
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页)
问题解答
回答1:对象默认的可配置属性和可枚举属性是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
回答2:这个API手册里面有说明,默认为false。
回答3:红包书上说的是,对于直接在对象上定义的属性,他们默认值为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值
相关文章:
1. python - 请问这两个地方是为什么呢?2. sql语句 - 如何在mysql中批量添加用户?3. mysql 可以从 TCP 连接但是不能从 socket 链接4. 事务 - mysql共享锁lock in share mode的实际使用场景5. mysql - PHP定时通知、按时发布怎么做?6. mysql - 数据库建字段,默认值空和empty string有什么区别 1107. 怎么php怎么通过数组显示sql查询结果呢,查询结果有多条,如图。8. node.js - mysql如何通过knex查询今天和七天内的汇总数据9. mysql - JAVA怎么实现一个DAO同时实现查询两个实体类的结果集10. javascript - 按钮链接到另一个网址 怎么通过百度统计计算按钮的点击数量
