JS对象

486 阅读2分钟

声明对象的两种语法

  1. let obj = {'name': 'june', 'age':18}
  2. let obj = new Object({'name':'june'})
  • 键名是字符串,引号可以省略,键名也还是字符串
  • 除了字符串,symbol也能做属性名
let a = Symbol()
let obj = {[a]:'Hello'}
  • Object.keys(obj)
  • 变量作属性名 []
let p1 = 'name'
let obj1 = {[p1]:'june'}
{name: "june"}
  • 对象的隐藏属性
  1. JS中每一个对象都有一个隐藏属性
  2. 这个隐藏属性储存着其共有属性组成的对象(原型)的地址
var obj = {}
obj.toString()

如何删除对象的属性

  1. delete obj.xxx
let obj = {'name': 'june', 'age':18}
delete obj.name
{age: 18} 
'name' in obj === false
obj.name === undefined true
  • delete 含有属性名,但值为undefined
'xxx' in obj && obj.xxx === undefined
  • obj.xxx === undefined不能断定xxx是否是obj的属性

如何查看对象的属性

  • 查看自身所有属性 Object.keys(obj)
  • 查看自身+共有属性 console.dir(obj)
  • 判断一个属性是自身的还是共有的 obj.hasOwnProperty('toString')
  • 两种方法查看属性 obj['key'] obj.key

原型

  • 每个对象都有原型
  1. 原型里存着对象的共有属性
  2. 比如obj的原型就是一个对象
  3. obj.__proto__存着这个对象的地址
  4. 这个对象里有toString/constructor/valueOf等属性
  • 对象的原型也是对象
  1. 对象的原型也是原型
  2. obj={}的原型即为所有对象的原型
  3. 这个原型包含所有对象的共有属性,是对象的根
  4. 这个原型也有原型,是null

如何修改或增加对象的属性

  • 直接赋值
obj['name'] = 'june'
  • 批量赋值
Object.assign(obj,{age: 18, gender: 'man'})

修改或增加共有属性

  • 无法通过自身修改或增加共有属性
  • 硬要修改或增加原型上的属性(不推荐用__proto__)
Object.prototype.toString='xxx'

总结

  • delete obj['name']
  • 'name' in obj //false
  • obj.hasOwnProperty('name') //false
  • Object.keys(obj)
  • console.dir(obj)
  • obj['name']
  • obj.name //name是字符串
  • obj[name] //name是变量
  • 改自身 obj["name"] = 'weng'
  • 批量改自身 Object.assigh(obj,{age:18})
  • 改共有属性 Object.prototype['toStirng']='xxx'
  • 改原型 let obj = Object.create(common)
  1. 同改