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()