javascript 之 Object.assing

Posted zmztya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 之 Object.assing相关的知识,希望对你有一定的参考价值。

语法:Object.assign(target,...source)

说明:Object.assign方法的第一个参数是目标对象,后面的参数都是源对象

一、以对象为参数的合并

1、第一个参数都是对象,后面的参数都是源对象

const target=a:1;
const source1=b:2;
const source2=c:2;
Object.assign(target,source1,source2);
输出:console.log(target);//a:1,b:2,c:3

2、 若只有一参数,会直接返回该参数

const obj=a:1;
consolt.log(Object.is(Object.asign(obj),obj));
输出:ture;

3、如果该参数不是对象会先转成对象

console.log(Object.assign(2));
输出:Number对象,其值为 2
console.log(typeof Object.assign(2));
输出:object

4、undefined和null无法转成对象,会报错

console.log(Object.assign(undefined));//报错
console.log(Object.assign(null));//报错  

 

二、如果非对象参数出现在源对象的位置上

1、如果undefined和null不在首参数,就不会报错

let obj1=a:1;
console.log(Object.is(Object.assign(obj1,undefined),obj1));
输出:true
console.log(Object.is(Object.assign(obj1,null),obj1));
输出:true

2、其他类型的值不在首参数也不会报错。但是目标对象一般都是对象,所以源对象也应该是对象。

const v1=‘abc‘;
const v2=true;
const v3=‘Symbol‘:0;
const v4=10;
const v5=5;
const v6=7;
const obj2=Object.assign(,v1,v2,v3,v4);
console.log(obj2);
输出:0:‘a‘,1:‘b‘,2:‘c‘,‘Symbol‘:0;
const obj3=Object.assign(,v4,v5,v6);
输出:
const obj3=Object.assgin(v4,v5,v6);
输出:Number对象,没有值

3、Object.assign拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性,也不拷贝不可枚举的属性)

Object.assign(b:‘c‘,Object.defineProperty(,‘invisible‘,enumerable:false,value:‘hello‘));
最后的结果没有验证://b:‘c‘

4、同名属性的替换(不管该属性的值是否为对象) 

const v1=a:b:1;
const v2=Object.assign(a:3,b:4,v1);
console.log(v2.a.b);
输出结果:1

5、数组的处理,把数组视为对象(就像上面有一个案例 v1=‘abc’,变为 0:‘a‘,1:‘b‘,2:‘c‘)

var v5=Object.assign([1,2,3],[4,5]);
console.log(v5);
输出:[4,5,3]

6、取值函数的处理,若复制的值是取值函数,那么求值后再复制

const v4=get foo()return 1;
const target=;
console.log(Object.assign(target,v4));
输出:foo:1 console.log(target.foo);
输出:1

三、常见的用途

1、为对象添加属性 

class Point
   constructor(x,y)
      Object.assign(this,x,y);
         
  

扩展内容:class声明创建一个基于原型继承的具有给定名称的新类

    class Polygon
        constructor(height, width)
            this.area = height * width;
       
     

     console.log(new Polygon(4,3).area);

     // expected output: 12

2、为对象添加方法

Object.assign(SomeClass.prototype,someMethod(arg1,arg2),anotherMethod());

3、克隆对象

function clone(obj)
   return Object.assign(,obj);  

4、合并多个对象

 const merge=(target,...sources)=>Object.assign(target,...sources);

5、为属性指定默认值

const DEFAULTS = 
  logLevel: 0,
  outputFormat: ‘html‘
;

function processContent(options) 
  options = Object.assign(, DEFAULTS, options);
  console.log(options);
  // ...

  

  

  

  

  

  

 

  

  

  

  

  

 

以上是关于javascript 之 Object.assing的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript(JS)之Javascript对象

前端之JavaScript

javascript面向对象之闭包

javascript之 JavaScript 工具库

前端之javascript

JavaScript之数组