js对象

117 阅读2分钟

js 对象(Object)

定义

  • 无序的数据集合
  • 键值对的集合

语法

let obj = { 'name':'frank', 'age':18}
let obj = new Object({ 'name':'frank'})
console.log({ 'name': "frank" , 'age' : 18})
就算引号省略了,属性名依然是字符串,永远都是字符串。

Object.key(obj)可以得到 obj 的所有 key

属性名

  • 每个 key 都是对象的属性名(property)

属性值

  • 每个 value 都是对象的属性值

变量做属性名

  • 之前都是用常量做属性名
  • let p1 = 'name'
  • let obj = { p1 : 'frank'} 这样写,属性名为 'p1'
  • let obj = { [p1] : 'frank' } 这样写,属性名为 'name'

对象的隐藏属性

  • JS 中每一个对象都有一个隐藏属性
  • 这个隐藏属性储存着其共有属性组成的对象的地址
  • 这个共有属性组成的对象叫做原型
  • 也就是说,隐藏属性储存着原型的地址

增删改查

删除属性

delete obj.xxx 或 delete obj['xxx']

  • 即可删除 obj 的 xxx 属性
  • 请区分「属性值为 undefined」和「不含属性名」

查看obj是否含有属性名(不能知道是不是共有属性)

'xxx' in obj 返回 false表示不含有

obj.hasOwnProperty('name')//返回false就是不是共有属性(可以知道是不是共有属性)

含有属性名,但是值为 undefined

'xxx' in obj && obj.xxx === undefined
返回true表示undefined

注意 obj.xxx === undefined不能断定 'xxx' 是否为 obj 的属性

查询属性

查看自身所有属性

  • Object.keys(obj) (查看对象的所有属性名)
  • Object.values(obj) (查看对象的所有属性值)
  • Object.entries(obj) (查看对象的所有属性名和属性值)
  • console.dir(obj) (查看对象的所有属性名,属性值和共有属性)
  • obj.hasOwnProperty('toString') (查看是否是对象的共有属性(toString))

写属性

批量赋值

  • Object.assign(obj,{p1:1,p2:2,p3:3})

修改或增加共有属性

  • 无法通过自身修改或增加共有属性

  • 可以直接修改原型里面的共有属性

  • 例如:

obj.__proto__.tostring = 'xxx'
obj2.tostring   返回"xxx"
  • 一般来说,不要修改原型的共有属性,可以通过Windows.Object.prototype来修改
  • 推荐使用Object.create
let obj = Object.create(common)//一开始就指定对象的原型
obj.name = 'frank'//再加属性
let obj2 = Object.create(common)
obj2.name = 'jack'

增属性

如果原本没有,就增加,有的话就改