JS 对象基本用法

61 阅读3分钟
  • 对象:无序的数据集合 键值对的集合
  • 属性名:每个key都是对象的属性名(property)
  • 属性值:每个value都是对象的属性值
  • 原型(共有属性):JS中每个对象都有一个隐藏属性,这个隐藏属性储存着其共有属性组成的对象的地址,这个共有属性组成的对象叫做原型,也就是说隐藏属性储存着原型地址

let obj ={} obj.toString()

1, 声明对象的两种语法

简写:let obj = {'name':'frank','age':18}

正规写法:let obj = new Object({'name':'frank'})

注意细节:

  • 键名是字符串,不是标识符,可以包含任意字符
  • 引号可以省略,省略后只能写标识符
  • 就算引号省略,键名也还是字符串(自动变成字符串)

2, 如何删除对象的属性

delete obj.xxx或 delete obj['xxx']即可删除obj的xxx属性

注意区分属性值为undefined不含属性名

  • 'xxx'in obj === false(false表示不含属性名)
  • 'xxx'in obj && obj.xxx === undefined(含属性名但是值为undefined)
  • 类比:你有没有纸?
  • A:没有/不含属性名
  • B:有,但没带/含有属性名 但值为undefined

3, 如何查看对象的属性

查看自身所有属性:

Object.keys(obj)keys就是把所有key打开

Object.values(obj)就是把所有值打开

Object.entries(obj)就是把所有keys和values都打开

image.png

查看自身+共有属性:

console.dir(obj)以目录的形式打出来

image.png

判断一个属性是自身还是共有的

obj.hasOwnProperty('toString')hasOwnProperty翻译为:拥有自己的属性 有的话为true,没有为false

查看单个属性

两种方法查看:

中括号语法:obj['name'],请优先使用这种写法

点语法:obj.name //记住这里的name是字符串,因为点语法会误导你,以为name不是字符型串,等你确定不会弄混两种语法,再用点语法

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

单个属性修改和增加操作相似,通过直接赋值:

let obj = {name:'frank'} //name是字符串

obj.name = 'frank' //name是字符串 通过“=”进行赋值

obj['name'] = 'frank' //通过中括号直接赋值(直接修改了)

批量属性修改,通过Object.assign(obj, {p1,p2,p3,p4}),将p1,p2,p3,p4赋值给obj,然后打印(assign:赋值)

image.png

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

'name' in obj表示对象是否含有属性name,把name作为字符串in obj,如果是false表示不含name属性,ture表示包含name属性

但是 'name' in obj有个问题,就是无法判断这个属性是自己的还是原型上共有的,那怎么判断呢?

obj.hasOwnProperty('name'):每个对象都有这个hasOwnProperty(翻译为:拥有自己的属性),后面加属性名,用于判断这个属性是自身的还是共有的:如果是false就说明这个属性不是他自身的(有可能原型上的,有可能就是没有),只有他自身有这个属性会返回ture