创建对象
存在性
判断对象中是否存在某个属性一般来说适用3种方法
in
操作符,缺点是会判断继承过来的属性- hasOwnProterty
- 对于Object.create(null)创建的对象需要使用
Object.prototype.hasOwnProterty.call(myobje,'a')
来判断 - Reflect.has(,"toString")
- Object.hasOwn()
tips in 操作符检查的是key键 of是值
可枚举
遍历k
- for...in
for...in
语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。
遍历对象及其原型链上可枚举的属性
-
Object.key()
-
返回对象自身可枚举属性组成的数组
-
不会遍历对象原型链上的属性以及 Symbol 属性
-
对数组的遍历顺序和 for in 一致
-
Object.getOwnPropertyNames
---------------------------- | 含原型属性 | 含不可枚举 | 含 Symbol 属性 | 返回值 |
---|---|---|---|---|
for...in | 是 | 否 | 否 | key |
Object.keys | 否 | 否 | 否 | [key...] |
Object.getOwnPropertyNames | 否 | 是 | 否 | [key...] |
Object.getOwnPropertySymbols | 否 | 是(只有 symbol) | 是 | [key...] |
Reflect.ownKeys | 否 | 是 | 是 | [key...] |
Object.values | 否 | 否 | 否 | [value...] |
Object.entries | 否 | 否 | 否 | [[key,value]...] |
map和对象
Map:
- Map有一个大小的属性,Object没有一个内置的方法去查询他的大小;
- Map是直接可迭代的,而Object不是;
- Map在使用方面更具有灵活性,可以使用任何数据类型作为键;
- Map保留了数据插入的顺序。
Object:
- 可以完美地使用JSON.parse()和JSON.stringify()去和JSON格式数据去做一个转换;
- 可以使用 Object.key 直接访问属性的值,不需向Map一样使用get()。