声明对象的两种语法
定义
无序的数据集合
键值对的集合
属性名:属性值
键名一定为字符串,不是标识符,可以包含任意字符
键名引号如果没有特殊字符(如中文)则可以省略,若省略了引号则为标识符
就算引号省略了也还是字符串
1.声明对象的两种语法
Let obj ={‘name’: ‘abc’,‘age’:18 }
Let obj = new Object({‘name’:’abc’})
Console.log({‘name’:’abc’,’age’:18})
Object.Keys(obj)可以得到obj的所有key
如果想用变量的值为属性名
a=‘xxx’
Let obj={[a]:yyy}
↓
xxx:yyy
Js每个对象都有一个隐藏属性,这个隐藏属性存储着其公有属性组成的对象的地址
存有所有隐藏(公有)属性组成的对象叫做原型,隐藏属性储存着原型的地址
共有属性用于节省内存
除了字符串,symbol也能作为属性名,迭代会用到
Let a = Symbol()
Let obj = {[a]: ‘Hello’}
如何删除对象的属性
Var obj ={name:’abc’ }
Delete obj.name 或 delete obj[‘name’] 值和属性名都删除
Undefined只删除值
‘name’ in obj === false 则不存在
含有属性名,但是值为 undefined
'xxx' in obj && obj.xxx === undefined
注意 obj.xxx === undefined 不能断定 'xxx' 是否为 obj 的属性
如何查看对象的属性
中括号语法:obj['key']
点语法:obj.key
查看x所有属性名
Object.keys(x)
[‘属性名’]
查看x所有属性值
Object.values(x)
[‘属性值’]
查看所有属性名和属性名
x
{‘属性名’:‘属性值’}
Object.entries(x)
[Array(2)]
{‘属性名’:‘属性值’}
查看x的所有属性和隐藏属性
Console.dir(x)
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
如何修改或增加对象的属性
直接赋值
obj['name'] = abc
批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
改共有属性
obj['name'] = abc
改原型
obj.__proto__ = common
let obj = Object.create(common)
注:所有
proto 代码都是强烈不推荐写的
'name' in obj和obj.hasOwnProperty('name') 的区别
'name' in obj 判断name属性是否存在
obj.hasOwnProperty('name')