JS 对象基本用法

声明对象的两种语法

  1. let obj={'name':'winter','age':18}//程序员习惯写法
  2. let obj=new Object({'name':'winter','age':18})//规范写法

对象属性的增删查改

  • delete obj.xxx 或者delete obj[‘xxx’]
  • obj.name=undefineddelete obj.name前者其实是把name赋值为undefined,并没有删除,后者删除
  1. 以下=>为输出的意思
  2. let obj={'name':'aa','age':11}
  3. =>undefined
  4. obj.name=undefined
  5. =>undefined
  6. obj
  7. =>Object { name: undefined, age: 11 }
  8. delete obj.name
  9. =>true
  10. obj
  11. =>Object { age: 11 }

查看是否删成功

  1. 'name' in obj
  2. =>false 删成功,若为true没有成功
  3. obj
  4. =>Object { age: 11 } 没有name则成功

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

  1. var obj={'name':'qq','age':11}
  2. =>undefined
  3. Object.keys(obj)
  4. =>Array [ "name", "age" ]

查看自身+共有属性

  1. console.dir(obj)//推荐
  2. obj.__pro__//两个_,不推荐

查看一个属性是自身的还是共有的


obj.hasOwnProperty('属性名')

  1. var obj={'name':'qq','age':11}
  2. =>undefined
  3. obj.hasOwnProperty('toString')
  4. =>false
  5. obj.hasOwnProperty('name')
  6. =>true

查看对象有没有这个属性

  1. var obj={'name':'qq','age':11}
  2. 'name' in obj
  3. =>true
  4. 'ww'in obj
  5. =>false

查看属性的值obj[‘key’]或者obj.key

  1. obj.name
  2. =>"qq"

查看所有属性的值

  1. Object.values(obj)
  2. =>Array [ "qq", 11 ]

查看属性名和值obj或者Object.entries(obj)

  1. obj
  2. =>{…}
  3. =>age: 11
  4. =>name: "qq"
  5. =><prototype>: Object { }
  6. Object.entries(obj)
  7. => […]
  8. =>0: Array [ "name", "qq" ]
  9. =>1: Array [ "age", 11 ]
  10. =>length: 2
  11. => <prototype>:Array[…]

写(修改和增加)

直接赋值

  1. let obj = {name: 'frank'} // name是字符串
  2. obj.name = 'frank' // name 是字符串
  3. obj['name'] = 'frank'
  4. obj['na'+'me'] = 'frank'
  5. obj[name] = 'frank'//错误, name是变量,值不确定
  6. let key = 'name'; obj[key] = 'frank'//key定义了,可以这样使用,key的值为name
  7. let key = 'name';obj.key = 'frank'//错
  8. 因为obj.key等价于 obj['key']

批量赋值


Object.assign(obj,{name:'ww',age:18,gender:'man'})

修改或增加共有属性

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

修改原型的原型属性(不推荐改)

  1. obj.__proto__.toString='xxx'//不推荐用__proto__
  2. window.Object.prototype.toString='yyy'

修改原型(上面是修改属性)

  • 区别:原型本质是对象,共有属性是属性,依附于原型
    obj.__proto__=null
  • 除了把原型改为null,也可以改其他值,原型链(可加原型)
  1. let common={'国籍':'中国','hairColor':'black'}
  2. =>undefined
  3. let person={'name':'winter'}
  4. =>undefined
  5. person.__proto__=common
  6. console.dir(person)
  7. =>{…}
  8. =>name: "winter"
  9. =><prototype>: {…}
  10. =>hairColor: "black"
  11. =>"国籍": "中国"//person的原型被改为common对象,原型里面还有原型
  12. =><prototype>: Object { }

ES6新写法

  1. let common={'国籍':'中国',hairColor:'black'}
  2. let person=Object.create(common)//()的位置写要加的原型,对象名
  3. person.name='winter'
  4. person.age=18
  5. person
  6. =>{name:"winter",age:18}

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

  • ‘name’ in obj是查看这个对象有没有这个属性
  • obj.hasOwnProperty(‘name’) 是判断属性是自身的还是共有的

能否断定’xxx’是obj的属性

  • 不能
  1. 代码示例:
  2. let obj={}
  3. let obj2={x:undefined}
  4. obj.x===undefined
  5. =>true
  6. obj2.x===undefined
  7. =>true
  8. 'x' in obj
  9. =>false
  10. 'x' in obj2
  11. =>true

区别示例一和示例二

  1. 示例一:let obj1=Object.create({name:'winter'})//对象obj1={},加原型{name:'winter'},name为共有属性
  2. 示例二:let obj2=new Object({name:'winter'})//对象obj2={name:'winter'},name为自身属性

分享

优秀笔记掘金篇
优秀笔记知乎篇