JS 对象基本用法

224 阅读2分钟

一、声明对象的两种语法

写法:

let obj={'name':'XXX','age':'XXX'}
let obj=new Object({'name':'XXX'})
 console.log({'name':'XXX','age':'XXX'})

注意:

  • 键名是字符串,不是标识符,可以包含任意字符

  • 引号可以省略,省略之后只能写标识符

  • 引号省略之后,键名也还是字符串

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

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

所有的属性名会自动变成字符串

变量作属性名加[]

let p1='name'
let obj={p1:'XXX'} //属性名为'p'
let obj={[p1]:'XXX'} //属性名为'name'

注意:

  • 不加[ ]的属性会自动变成字符串,加了[ ]会当做变量求值

  • 值如果不是字符串,则会自动变成字符串

对象的隐藏属性

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

var obj={}
obj.toString() //不报错
因为obj的隐藏属性对应的对象上有toString()

二、如何删除对象的属性

delete obj.XXXdelete obj['XXX']即可删除obj的XXX属性

delete删除属性和值,一般只用来删除属性,undefined删除值

注意obj.XXX===undifined不能断定'XXX'是否为obj属性

三、如何查看对象的属性

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

  • 查看自身+共有属性:console.dir(obj)Object.keys打印obj.__proto__

  • 判断一个属性是自身还是共有:obj.hasOwnProperty('toString')

查看属性的方式:

中括号语法:obj['key']

点语法:obj.key

优先使用中括号语法

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

  1. 直接赋值
let obj={name:'XXX'} //name是字符串
obj.name='XXX' //name是字符串
obj['name']='XXX'
obj['na'+'me']='XXX'
let key = 'name';obj[key]='frank'
  1. 批量赋值
object.assign(obj,{a:1,b:2,c:3})
  1. 共有属性无法通过自身修改或增加
let obj={},obj2={}  //共有toString

obj.toString='XXX'只会修改obj自身属性,obj.toString还是在原型上

  1. 修改或增加原型上的属性
obj.__proto__.toString='XXX'`//不推荐
Object.prototype.toString='XXX'

一般不修改原型,容易引起问题

  1. 修改隐藏属性

__proto__

let obj={name:'XXX'}
let obj={name:'YYY'}
let common={kind:'human'}
obj.__proto__=common
obj2.__proto__=common

Object.create

let obj=Object.create(common)
obj.name='XXX'
let obj2=Object.create(common)
obj2.name='YYY'

五、'name' in obj和obj.hasOwnProperty('name') 的区别

都是两种查看属性是不是在对象里的方法
前者自身属性和共有属性都返回true,后者仅仅是自身属性才返回true

image.png