简介:很多概念不清或忘记,重新构建自己的知识体系。每天问自己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
作为数据的临时存储区,将arrayOne
给arrayTwo
,改变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 = []; // 赋值为一个空数组以达到清空原数组