1、对象
(1)简洁表示法
let foo = 'bar';
let baz = {foo}//{foo:'bar'}
function f(x,y){
return {x,y}//{x:x,y:y}
}
let o = {
method(){}
}
(2)属性名表达式
let key = 'foo'
let o = {
[key]:123,
['a'+'b']:123
}
(3)object.is();
与“===”基本一致,不同的有两点:+0不等于-0,NaN等于NaN
(4)object.assign()的用途以及黑科技
为类添加属性
class P {
constructor(x,y){
Object.assign(this,{x,y})
}
}
为类添加方法
Object.assign(class.prototype,{
method(){},
method2(){}
})
深度克隆
function clone(o){
let oproto = Object.getPrototypeOf()
return Object.assign(Object.create(oProto),o)
}
合并对象
const merge = (target,...source)=>{
Object.assign(target,...assign)
}
为属性指定默认值
function default (opts){
opts = Object.assign({},default,opts)
}
(5)判空传导
读取a.b.c.d的安全写法
(1)const foo = (a&&a.b&&a.b.c&&a.b.c.d)
||'default'
(2)const foo = a.b?.c?.d||'default'
(6)属性的遍历
es6一共有5种方法可以遍历对象的属性
for...in //遍历自身和继承的可枚举属性
Object.keys(obj)//返回只包含自身的可枚举属性的数组
Object.getOwnPropertyNames(obj)//同上
Object.getOwnpropertySymbols(obj)//返回自身所有的symbol属性
Reflect.ownKeys(obj)//所有属性