(精华)2020年7月3日 JavaScript高级篇 ES6(数组的扩展方法)
【摘要】
展开运算符 … 拆包
函数调用的体现
function f(a,b,c){}
var args = [1,2,3]
// f.apply(null,args)
// 拆包
f(...args)
123...
展开运算符 … 拆包
函数调用的体现
function f(a,b,c){}
var args = [1,2,3]
// f.apply(null,args)
// 拆包
f(...args)
- 1
- 2
- 3
- 4
- 5
后面可以放表达式
let a = 1;
const arr = [
...(a>0? ['a']: [])
]
- 1
- 2
- 3
- 4
替代函数的apply方法
// 思考连接两个数组的方法
let arr1 = [1,2,3]
let arr2 = [4,5,6]
console.log(arr1.concat(arr2));
console.log(arr1);
// es5 解决办法
Array.prototype.push.apply(arr1,arr2);
// es6
// (...arr1) += (...arr2)
// 扩展运算符只有函数调用的时候才可以放在圆括号当中
// (...[1,2])
// console.log((...[1,2]));
arr1.push(...arr2);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
复制数组
const a1 = [1,2]
const a2 = a1;// 复制
console.log(a1 === a2);// 指向同一个房间
// 浅克隆是长得一样 但是地址不一样
const a3 = a1.concat()// 浅拷贝
console.log(a3);
console.log(a1 === a3);// 没有指向同一个房间
const a4 = [...a1]
console.log(a4);
console.log(a4 === a1);// 浅拷贝
// 展开运算符是浅拷贝 而不是 深拷贝
let arr = [{a:1},2,3]
// let arr1 = [...arr] // 是深拷贝嘛?
// arr1[0].a = 2
// // 如果此时arr[0].a = 2 说明是浅拷贝 不等于2 说明是深拷贝
// console.log(arr);
// 深拷贝 除了递归能实现
let arr2 = JSON.parse(JSON.stringify(arr))
arr2[0].a = 2;
// 如果此时arr[0].a = 2 说明是浅拷贝 不等于2 说明是深拷贝
console.log(arr);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
…打包
// const [first,...arr] = [1,2,3,4,5]
// console.log(arr);
// const [o,...s] = [];
// console.log(o) // undefined
// console.log(s) // []
// 只能放在参数的最后一位
// const [...arr,first] = [1,2,3,4,5]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Array.from()
// Array.from() 用于把类数组对象转化成真正的数组
// 部署了 iterator 接口 都可以用Array.from()转化成真正的数组
// 有 length属性 没有数组操作的一些方法 push
function get(a,b,c){
console.log(arguments);
console.log(Array.from(arguments));
}
get(1,2,3)
const copyArr = {
'0':'a',
'1':'b',
length:2
}
console.log(Array.from(copyArr));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
Array.of()
// 可以将一组值转化成数组
console.log(Array.of(2,3,4,5));
// ? 弥补数组构造函数的一些不足
console.log(Array(3).length);
// 当参数不少于2个时候
console.log(Array(1,2,3));
console.log(Array.of(3));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
copyWithin()
// copyWithin()
// 1 必须要传的 从该位置开始替换数据
// 2 start 从该位置读取数据 默认是0
// 3 end
console.log([1,2,3,4,5].copyWithin(0,3)); // [4,5,3,4,5]
- 1
- 2
- 3
- 4
- 5
find() ,findIndex()
let arr = [1,2,3,-1,-2,45]
let res = arr.find(function(i){
return i<0
})
console.log(res);
let resIndex = arr.findIndex(function(i){
return i<0
})
console.log(resIndex)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。
原文链接:codeboy.blog.csdn.net/article/details/107115411
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)