Skip to content

{ key: value }

任何一个对象都具备以下特点

  • 1.由零到多组键值对组成的,用逗号分隔,并且键不能重复
  • 2.属性名的类型是字符串/Symbol。属性值可以是任何类型
  • 3.属性名不能是引用数据类型(会被 String() ),如果非要让 key 是对象,只能基于 ES6 中的 Map 处理
  • 4.设置属性名和属性值,属性名不能重复,如果已经存在,会修改属性值
js
const obj = {
  // 'name'
  name: 'Tom',
  // '0'
  0: 100,
  // symbol
  [Symbol()]: 100
}

取值

对象.属性名

  • 属性名是数字, 报错
  • 属性名是其他, 都被当成字符串, 直接找

对象[属性名]

  • 1.属性名是字符串, 直接找
  • 2.属性名是非字符串的其他基本数据类型, 转为字符串查找
  • 3.属性名是引用数据类型, 通过toString转化为字符串查找
  • 4.属性名不是值而是变量, 将变量存储的值作为属性名按照上述规则查找查找
js
const o = {
  0: 'A',
  true: 'B',
  '[object Object]': 'D'
}
const b = {}
o[0] // 'A'
o['0'] // 'A'
o[true] // 'B'
o[b] // 'D'

删除属性

  • 真删除: 把属性彻底删除, delete obj.xxx
  • 值删除: 属性还在,但值为空 obj.xxx = null
js
let n = 100
let obj = {}
obj.n = 200 // { n: 200 },n的数据格式是字符串
obj['n'] = { n: 200 } // 同上
obj[n] = 200 // { 100: 200 }, 100 的数据格式是字符串
obj[m] = 200 // 报错 m is not defined