《每天十分钟》-红宝书第4版-语言基础-数据类型(四)

符号类型 Symbol 作为 对象属性名

为对象定义属性
固定属性名

let o = {name:'zhangsan'}
// 或者
o.age = 18

变量属性名

let temp = 'abc'
let tt = {[temp]:'tempVAlue'}
console.log(tt) //{abc: 'tempVAlue'}

使用 Object.defineProperty()/Object.definePropertie 定义

let o = {name:'zhangsan'}
Object.defineProperty(o,'age',{value: 18})
console.log(o) //{name: 'zhangsan', age: 18}
// 也可以一次定义多个
Object.defineProperties(o,{'p1':{value:'p1Value'},'p2':{value: 'p1Value'}})
console.log(o) //{name: 'zhangsan', age: 18, p1: 'p1Value', p2: 'p1Value'}

符号类型 Symbol 的重要用途是确保对象属性使用唯一标识符,不会发生属性冲突的问题

let s1 = Symbol('s1')
let o = {[s1]:'s1Value'}
console.log(o) // {Symbol(s1): 's1Value'}
//或者
o[s1] = 's1Value1'
console.log(o) // {Symbol(s1): 's1Value1'}
//或者
Object.defineProperty(o,s1,{value:'s1Value'})
console.log(o) // {Symbol(s1): 's1Value'}
// 或者
Object.defineProperties(o, {
    [s1]: {value: 's1Value'}
})
console.log(o) // {Symbol(s1): 's1Value'}

如果获取一个对象中有哪些常规属性以及有哪些符号属性

 Object.getOwnPropertyNames() //返回对象实例的常规属性数组
 Object.getOwnPropertySymbols() //返回对象实例的符号属性数组
 console.log(Object.getOwnPropertySymbols(o)) //[Symbol(s1)]

顺便扩展学习一下 Object.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor(o,s1)//{configurable:true,enumerable:true,value:"s1Value",writable:true}
//enumerable 是否可枚举(遍历)
//writable 能否可修改
//configurable 是否可以使用delete 删除、或者修改属性
//value 属性数据

对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。
补充

  • Object.assign()只拷贝可以枚举的属性(符号Symbol 可以枚举)。

  • for…in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

  • Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

  • Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

  • Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

  • Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

休息时间,最近全球受厄尔尼诺现象影响气温普遍较高,欣赏一首夏天的诗

夏夜追凉
杨万里杨万里〔宋代〕
夜热依然午热同,开门小立月明中。
竹深树密虫鸣处,时有微凉不是风。

你可能感兴趣的:(《每天十分钟》红宝书第4版,前端,javascript,开发语言)