Object assgin、keys、values、entries的使用

Object.keys()、与Object.values()

Object.keys()、Object.values()的返回值都是数组 一个是由对象的键组成的,一个是由对象的值组成的

 var person = {
    name: '张三',
    age: 18,
    66: '66',
    2: '2'
  }

image
image

Object.entries()

Object.entries() 返回值是个二维数组 对象的每个键与值会组成一个数组
image

Object.assgin()

Object.assign(target, ...sources)

  • 参数:target:目标对象。 sources:源对象。
  • 返回值:目标对象。
    复制对象
const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }

深拷贝问题
针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是(可枚举)属性值。
假如源值是一个对象的引用,它仅仅会复制其引用值。

const log = console.log;
function test() {
  'use strict';
  let obj1 = { a: 0 , b: { c: 0}};
  let obj2 = Object.assign({}, obj1);
  log(JSON.stringify(obj2));
  // { a: 0, b: { c: 0}}

  obj1.a = 1;
  log(JSON.stringify(obj1));
  // { a: 1, b: { c: 0}}
  log(JSON.stringify(obj2));
  // { a: 0, b: { c: 0}}

  obj2.a = 2;
  log(JSON.stringify(obj1));
  // { a: 1, b: { c: 0}}
  log(JSON.stringify(obj2));
  // { a: 2, b: { c: 0}}

  obj2.b.c = 3;
  log(JSON.stringify(obj1));
  // { a: 1, b: { c: 3}}
  log(JSON.stringify(obj2));
  // { a: 2, b: { c: 3}}

  // Deep Clone
  obj1 = { a: 0 , b: { c: 0}};
  let obj3 = JSON.parse(JSON.stringify(obj1));
  obj1.a = 4;
  obj1.b.c = 4;
  log(JSON.stringify(obj3));
  // { a: 0, b: { c: 0}}
}

test();

合并多个对象 ,有相同属性的话 后面对象的值会覆盖前面的对象的值

const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };

const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
posted @ 2021-12-29 15:33  xiao旭  阅读(104)  评论(0编辑  收藏  举报