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. javascript - 關于css絕對定位在ios瀏覽器被橡皮筋遮擋的問題2. javascript - 請教如何獲取百度貼吧新增的兩個加密參數3. mysql - 分庫分表、分區、讀寫分離 這些都是用在什么場景下 ,會帶來哪些效率或者其他方面的好處4. Python爬蟲如何爬取span和span中間的內容并分別存入字典里?5. javascript - 請問 chrome 為什么會重復加載圖片資源?6. c++ - 請問MySQL_Connection::isReadOnly 怎么解決?7. css3 - 微信前端頁面遇到的transition過渡動畫的bug8. (python)關于如何做到按win+R再輸入文件文件名就可以運行?9. python - 能通過CAN控制一部普通的家用轎車嗎?10. html5 - 只用CSS如何實現input框的寬度隨框里輸入的內容長短自動適應?
