对象的原型:

image.png

声明对象的两种语法:

  • let obj = {"name":"jack"}//语法糖
  • let obj = new Object({'name': 'jack'})
  • console.log({ 'name': 'jack, 'age': 18 })
  • image.png

    如何删除对象的属性:

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

  • 不含属性名 'xxx' in obj === false
  • 含有属性名,但是值为undefined

    'xxx' in obj && obj.xxx === undefined

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

    如何查看对象的属性:

  • 查看自身所有属性 Object.keys(obj)

  • 查看自身+共有属性 console.dir(obj)
  • 判断一个属性是自身的还是共有的 obj.hasOwnProperty('toString')

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

  • 批量赋值 Object.assign(obj, {age: 18, gender: 'man'})

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

let obj = {}, obj2 = {} // 共有 toString
obj.toString = 'xxx'只会在改 obj 自身属性
obj2.toString 还是在原型上

  • 我偏要修改或增加原型上的属性

Object.prototype.toString = 'xxx'
(一般来说,不要修改原型,会引起很多问题)

‘name’ in obj和obj.hasOwnProperty(‘name’) 的区别:

  • 'name' in obj 是用来判断obj中是否有name属性,只要有,不管是否在原型中都会返回truehasOwnProperty,只能用来查看obj的私有属性中是否有name属性,如果name在其原型中则返回false