Object
# Object
# 属性简写
let a = 1,b =2 ,c = 3;
let obj = {
a : a,
b : b,
c : c
}
// 等价于
let obj = {
a,
b,
c
}
// 属性变量
let obj = {
a,
[b]:b,
[a+c]:c
}
console.log(obj) // {a:1,2:2,4:3}
// 方法名可以缩写 可以使用一部函数
let obj = {
a,
say(){},
* work(){}
}
# Set
Set 不允许存放重复数据,如果重复则自动过滤,常用于数据去重
weakSet
let s = new Set()
// let s = new Set([1,2,3,4])
s.add('hello').add('world').add('hello') //添加数据
s.delete('helleo') //删除
s.clear() // 清空
s.has('hello') //查找
s.size // 已存在多少条数据
s.keys() // key组成的数组
s.values() // value组成的数组
s.entries() // 键值对组成的数组
s.forEach(item =>{ console.log(item) }) // 遍历
for(let item of s){ console.log(item) } // 遍历
# Map
map 的 key 类型可以是任意的
weakMap
let m = new Map()
// let m = new Map([[1,2],[2,3]])
m.set(1,2)
m.set(3,4)
m.set(1,3) // 修改
m.delete(1)
m.clear()
m.size
m.has(1)
m.get(1) // 3
m.keys()
m.values()
m.enrties()m
m.forEach((item,index) =>{ console.log(item) })
for(let [key,item] of s){ console.log(item) }
# 对象拷贝
const target = {}
const source = {a:{c:{d:3}},b:2}
Object.assign(target,source) // Object.assign() 浅拷贝
# fromEntries
Object.fromEntries(Array) // 将 [[a,1],[b,2]] 数组转换为 Object
Object.entries(Object) // 将 Object 转换为 [[a,1],[2,2]] 结构的数组
# Reflect
# Reflect.defineProperty
Reflect.defineProperty ( target, propertyKey, attributes )
类同于Object.defineProperty(),不同的是该方法返回的是布尔值,而不需要你像以前那样去捕捉异常(因为Object.defineProperty是在执行出错的时候直接抛错的)
# Reflect.getOwnPropertyDescriptor
Reflect.getOwnPropertyDescriptor ( target, propertyKey )
类同于Object.getOwnPropertyDescriptor(),如果对应的属性存在则返回给定属性的属性描述符,否则返回未定义。
# Reflect.deleteProperty
等同于调用delete target[name]
# Reflect.getPrototypeOf
Reflect.getPrototypeOf ( target )
等同于Object.getPrototypeOf(),唯一不同的是当传参target不是一个对象的时候:前者会强制将target转为一个对象。
# Reflect.setPrototypeOf
Reflect.setPrototypeOf ( target, proto )
等同于Object.setPrototypeOf,差别的地方和刚才的getPrototypeOf是一样的。如果传参没有错,那么Reflect是直接返回布尔值来标识是否成功,而后者则直接抛错来表明失败。
# Reflect.isExtensible
等同于Object.isExtensible(),区别也是在于返回值。
# Reflect.preventExtensions
Reflect.preventExtensions ( target )
类同于 Object.preventExtensions()。区别也是在于返回值
# Reflect.get
Reflect.get ( target, propertyKey [ , receiver ])
该方法用来获取对象中某个属性的方法
# Reflect.set
Reflect.set ( target, propertyKey, V [ , receiver ] )
类同于上面的get方法
# Reflect.has
Reflect.has ( target, propertyKey )
该方法类似于in操作符,返回布尔值来表明该属性是否存在该对象上或者其原型链上
# Reflect.ownKeys
Reflect.ownKeys ( target )
返回目标对象已有的所有属性(不包括原型链)的一个数组
# 常用方法
// 将数据标记为只读,无法进行修改
Object.freeze()
// 判断是否具有某属性
obj.hasOwnProperty('aa')
// key集合
Object.keys(obj)
// value集合
Object.values()