创建函数以生成克隆对象

时间:2018-09-13 09:00:37

标签: javascript

需要创建一个函数,该函数接受一个对象并为其创建对象副本,但不复制输入对象的深层属性。

var obj = {foo : 'Bar'}; 
var cloneObj = getClone(obj); // getClone is the function which you have to write 
console.log(cloneObj === getClone(obj)); // this should return false
console.log(cloneObj == getClone(obj)); // this should return true

1 个答案:

答案 0 :(得分:0)

您问的内容在JavaScript中是不可能的。

==的操作数是同一类型(在这种情况下,它们都是对象)时,=====的作用完全相同。根据规范的Abtract Equality Comparison algorithm

  

比较x == y,其中x and y are values, produces为真or为假`。这样的比较如下:

     
      
  1. 如果Type(x)与Type(y)相同,则

         

    a)返回执行严格平等比较x === y

  2. 的结果   
     

...

您可以使用Object.assign将对象的属性¹复制到新对象中:

clonedObj = Object.assign({}, obj);

...或在ES2018 +中传播财产:

clonedObj = {...obj};

...但是在两种情况下,=====的对象都是不相等的。


¹具体来说,它是自己的,可枚举的;不能继承或不可枚举。 (也可以使用Object.assign...来做到这一点。)