填坑-十万个为什么?(9)

294 阅读2分钟

简介:很多概念不清或忘记,重新构建自己的知识体系。每天问自己1~多个问题。我是菜鸟 成为大神之路!

学习ES6 之后的学习很多地方都会涉及到 ES6的相关内容。 ES6 link

1. JavaScript 数组拷贝(复制)有哪些方法以及推荐?

var arrayOne = [{
      'id': 13,
      'projectName': '我的第一篇文章',
      'projectTag': [
        '文章'
      ],
      'privacy': false
    },
    {
      'id': 14,
      'projectName': '网址收藏推荐系统',
      'projectTag': [
        'java,webApp,网址收藏'
      ],
      'privacy': false
    }];
var arrayTwo=[];
①为什么要深拷贝数组?

什么是深拷贝:深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
我们时常会使用 = 号进行 arrayTwo = arrayOne;这样的赋值特别的在数组作为参数传递时,场景我们希望arrayTwo作为数据的临时存储区,将arrayOnearrayTwo,改变arrayOne的内容。

arrayTwo = arrayOne;
arrayOne[1].id = 19999;
console.log(arrayOne);
console.log(arrayTwo);

② for循环 【对象数组浅拷贝,基本类型数组深拷贝】
for(let i = 0;i< arrayOne.length; i++){
    arrayTwo.push(arrayOne[i]);
}
arrayOne[1].id = 19999;
console.log(arrayOne);
console.log(arrayTwo);

③Array.prototype.slice() 方法 【对象数组浅拷贝,基本类型数组深拷贝】【推荐】

返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。

arrayTwo = arrayOne.slice(0);
arrayOne[1].id = 19999;
console.log(arrayOne);
console.log(arrayTwo);

④Array.prototype.concat()方法 【对象数组浅拷贝,基本类型数组深拷贝】

用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

arrayTwo = arrayOne.concat();
arrayOne[1].id = 19999;
console.log(arrayOne);
console.log(arrayTwo);
⑤Array.from() 方法 【推荐使用⭐⭐⭐】[补充2019年1月7日 12点45分]资源ES6入门

从一个类似数组或可迭代对象中创建一个新的数组实例

var arr1 = [1,2,6,4];
var arr = Array.from(arr1); 
// [1,2,6,4]
...ES6 -Rest方法【推荐使用⭐⭐⭐⭐】[充2019年1月7日 12点45分]资源ES6入门
let arr1 = [1,2,6,4];
let arr = [...arr1]; 
// [1,2,6,4]

2. JavaScript 对象拷贝(复制)有哪些方法以及推荐?

思想利用对象属性取值 这里涉及 获取对象的属性(第三天的内容) juejin.cn/post/684490…

'看到公司使用的是 for-in'
var objOne = {
      'id': 13,
      'projectName': '我的第一篇文章',
      'projectTag': [
        '文章'
      ],
      'privacy': false
    };
var objTwo = {};

for(var pro in objOne){
    objTwo[pro] = objOne[pro];
}

console.log(objOne);
console.log(objTwo);

3. 清空数组的方法及推荐?

①Array.prototype.slice() 方法【推荐⭐⭐
var array = [1,2,3,4]; 
array.splice(0,array.length); 
console.log(array); // 输出 [],空数组,即被清空了
②length赋值为0【推荐⭐⭐⭐】
var array = [1,2,3,4]; 
array.length = 0; 
console.log(array); // 输出 [],空数组,即被清空了
③赋值为[] 【推荐⭐⭐⭐⭐】
var array = [1,2,3,4]; 
array = []; // 赋值为一个空数组以达到清空原数组