对象方法

181 阅读2分钟
  1. Object.assign(a, b....): 合并复制对象,并返回一个新对象;

     说明:
         1.将第二个之后的所有参数全部合并进第一个参数中,并返回一个合并之后的新对象;
         2.第一个参数被修改成合并之后的内容,后面参数对象保持原样不变;
         3.有一层浅拷贝作用,将第二个之后的对象内容拷贝进第一个参数;
    
代码:
var a = {'a': 'a', 'c': 'c'}
var b = {'b': 'b', 'c': 'c', 'd': 'd'}
var c = {'c': 'c', 'e': 'e', 'f': {'f': 'f'}}
var d = Object.assign(a, b, c)

d === a // true
d.a = 'a1' // a.a -> a1 修改合并之后的内容虽然会返回一个新对象,但实际新对象和第一个参数的对象是同一个内容,感觉有些多余,可以不用接收返回值;
d.c = 'c1' // b.c -> c 修改合并后的内容对象不印象第二个参数之后的内容;
d.f.f = 'f1' // c.f.f -> f1 修改合并后的对象同步会修改第二个参数之后的引用类型数据,浅拷贝;
  1. Object.create(): 使用指定的原型对象和属性创建一个新对象。
var person = {
    sex: 'M',
    say() {
        console.log(`name: ${this.name}, sex:${this.sex}`)
    }
}
var me = Object.create(person);
me.name = 'HU'
me.sex = 'F'
me.say() // name: HU, sex:F

Object.create(null) // 创建一个纯净的对象,该对象无[[Prototype]];
  1. Object.entries(): 返回给定对象自身可枚举属性的[key, value]数组。
var a = {'a': 'a', 'c': 'c'}
Object.entries(a) // [['a', 'a'], ['c', 'c']]
  1. Object.freeze(): 冻结对象,使其不能被修改/添加/删除,不能修改对象已有属性,原型也不能被修改;
var a = {'a': 'a', 'b': {'b': 'b'}, 'c': 'c'}
Object.freeze(a)
a.a = 'a1' // a -> {'a': 'a', 'b': {'b': 'b'}, 'c': 'c'} 不变
a.d = 'd' // a -> {'a': 'a', 'b': {'b': 'b'}, 'c': 'c'} 不变
a.b.b = 'b1' //  a -> {'a': 'a', 'b': {'b': 'b1'}, 'c': 'c'} 索引类型会被修改
delete a // false
  1. Object.fromEntries(): 把键值对列表转换为一个对象, 普通对象会报错;
var a = new Map([['a', 'a'], ['b', 'b']]);
Object.fromEntries(a) // {a: 'a', b: 'b'}
  1. Object.is():方法判断两个值是否是相同的值,类似全等,但是特殊在于可以判断NaN;
Object.is(NaN, NaN) // true
NaN === NaN // false

Object.is(0, -0) // false
0 === -0 // true
  1. Object.keys(): 返回一个由对象所有键组成的数组;
var a = {'a': 'a1', 'b': 'b1'};
Object.keys(a) // ['a', 'b']
  1. Object.values(): 返回一个由对象所有值组成的数组;
var a = {'a': 'a1', 'b': 'b1'};
Object.values(a) // ['a1', 'b1']