We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
读书笔记 📝《JavaScript 高级程序设计》 一个 Javascript 对象就是键和值之间的映射。键是一个字符串(或者 Symbol) ,值可以是任意类型的值。
数据属性 数据属性是键值对,并且每个数据属性拥有下列特性( attribute ) 数据属性的特性(Attributes of a data property)
对于这样一个直接定义的属性,就是一个数据属性
let person = { name: 'rcw' }
可以使用 Object.defineProperty() 修改属性的特性
let person = { name: 'old' } Object.defineProperty(person, 'name', { value: 'new' }) console.log(person.name) // new
注意 在把 [[Configurable]] 设置为 false 之后,除了 [[Value]] 和 [[Writable]] 以外的特性都不能被改变,否则就会报错
let person = { name: 'old' } Object.defineProperty(person, 'name', { configurable: false }) Object.defineProperty(person, 'name', { enumerable: false }) //Uncaught TypeError: Cannot redefine property: name // at Function.defineProperty (<anonymous>)
访问器属性 访问器属性有一个或两个访问器函数 (get 和 set) 来存取数值,并且有以下特性 访问器属性的特性
访问器属性不能直接定义,必须用 Object.defineProperty()
let person = { _name: 'old' } Object.defineProperty(person, 'name', { get () { return this._name }, set (val) { this._name = val } })
getOwnPropertyDescriptor Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
let person = { _name: 'old' } Object.defineProperty(person, 'name', { get () { return this._name }, set (val) { this._name = val } }) console.log(Object.getOwnPropertyDescriptor(person, '_name')) //configurable: true //enumerable: true //value: "old" //writable: true console.log(Object.getOwnPropertyDescriptor(person, 'name')) //configurable: false //enumerable: false //get: ƒ () //set: ƒ (val)
Object.freeze() Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
'use strict' const obj = { prop: 42 }; Object.freeze(obj); obj.prop = 33; // Throws an error in strict mode console.log(obj.prop); // expected output: 42
Object.isFrozen() Object.isFrozen()方法判断一个对象是否被冻结。
const obj = { prop: 42 }; Object.freeze(obj); Object.isFrozen(obj);// true
Object.preventExtensions() Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。
const obj = { prop: 42 }; Object.preventExtensions(obj); obj.newAtr = 1 //Uncaught TypeError: Cannot add property newAtr, object is not extensible
Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。
const obj = { prop: 42 }; Object.preventExtensions(obj); Object.isExtensible(obj);//false
MDN: 数据类型 《JavaScript 高级程序设计》
The text was updated successfully, but these errors were encountered:
No branches or pull requests
读书笔记
📝《JavaScript 高级程序设计》
一个 Javascript 对象就是键和值之间的映射。键是一个字符串(或者 Symbol) ,值可以是任意类型的值。
属性类型
数据属性
数据属性是键值对,并且每个数据属性拥有下列特性( attribute )
数据属性的特性(Attributes of a data property)
对于这样一个直接定义的属性,就是一个数据属性
可以使用 Object.defineProperty() 修改属性的特性
注意
在把 [[Configurable]] 设置为 false 之后,除了 [[Value]] 和 [[Writable]] 以外的特性都不能被改变,否则就会报错
访问器属性
访问器属性有一个或两个访问器函数 (get 和 set) 来存取数值,并且有以下特性
访问器属性的特性
访问器属性不能直接定义,必须用 Object.defineProperty()
对象的方法
getOwnPropertyDescriptor
Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
Object.freeze()
Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
Object.isFrozen()
Object.isFrozen()方法判断一个对象是否被冻结。
Object.preventExtensions()
Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。
Object.isExtensible()
方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。
参考资料
MDN: 数据类型
《JavaScript 高级程序设计》
The text was updated successfully, but these errors were encountered: