对象是无序的数据集合也是键值对的集合
声明对象的两种语法
- let obj={'name':'frank','age':18}
- let obj=new Object({ 'name':'frank' })
- 注意:
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可省略,省略之后就只能写标识符,就算引号省略,键名也还是字符串
- 没有数字键名、没有数字下标。。虽然看着像数字,但是都是字符串,可以用Object.keys(a)查看key的类型
如何删除对象的属性
语法:delete obj.xxx或delete obj['xxx'],即可删除obj的xxx属性
注意:delete删除属性跟值(不含属性名),而undefined只删除值(属性值为undefined)
区分:不含属性名和含属性名但属性值为undefined
不含属性名:'xxx' in obj ===false;
含属性名,但是值为undefined:'xxx' in obj && obj.xxx===undefined
如何查看对象的属性
- 查看自身所有属性:Object.keys(obj)
- 查看自身+共有属性:console.dir(obj)
- 查看对象的一个属性:两种方法:
- 中括号语法:obj['key'] //注意加引号才是个key,不加就是个变量不确定的值
- 点语法:obj.key
如何修改或增加对象的属性
直接赋值
- let obj ={name:'frank'}
- obj.name='frank'
- obj['name']='frank'
- obj['na'+'me']='frank'
- let key='name';obj[key]='frank'
批量赋值
- Object.assign(obj,{age:18,gender:'man'})
'name' in obj和obj.hasOwnProperty('name') 的区别
'name' in obj :如果这个name包含在obj中,不管是自有的还是共有的,只要包含其中,就返回true
obj.hasOwnProperty('name'):如果是自己的属性会返回true,共有的或者不存在的会返回false,
所有用它俩可以判断一个属性是自有的还是共有的