展开语法定义: 在函数调用/数组构造时,以数组的形式展开使用
语法公式:...element(元素)
别看短短的一句话,这个可是展开语法最为核心,因为越简单的越难,简单中包含着难!
第一部分:函数的调用
function name(...vars){
console.table(vars);
}
name(1,"秋刀鱼",{name : "亚尔"},[1,2,3],);//实数,字符串,对象,数组
来看看,展开语法在函数的调用中起到了什么作用!
先看看没有使用展开函数
只输出了一个,那么我想多次输出怎么办(在不适用展开语法)
第一种多次调用,第二种以数组的形式写入值
function name(vars){
console.table(vars);
}
name([1,2,3]);
疑问一:丫的,你这个是表格输出,而且表格输出是一个专门针对数组的!用数组肯定是对的
回答:前面也是用表格,在调用函数时既没有使用展开语法,也没有使用数组,他返回的值是1
疑问二:我想要针对值的使用呢?
回答:数组你怎么选值的?根据下标,那么这个问题就解决了!
简单的进阶
function name (...arrs){
for(let i = 0 ; i < arrs.length ; i++)
{
let arr = arrs[i];
if(arr > 3)
console.log("对了");
else
console.log("错了");
}
}
name(1,2,3,4,5,6);
先不运行,用理论来思考,第一步,函数的调用在展开语法下变成了数组!arrs用来存储数组
第二步,第一次进入循环,i == 0,满足条件,进入循环体,arr变量 = arrs [i]的值
其实在这里可以进一步优化,直接用arrs[i]的值进行判断,没必要像我一样用一个变量来存储
第三步,进入判断语句,数组arrs下标为0的值是1,不满条件大于3,所以输出错了
重复6次,问为什么是6次,arrs.length为6,为什么arrs.length为6,因为展开语法把调用函数的值以数组的形式展开,总共就会有三个对与三个错
小结
展开语法,优化调用函数的值
数组构造时
数组构造有两种方法:一种为字面量,一种为构造函数
let arr = [];//字面量
let arr = new Array();//构造函数,区别之前说了
在直接使用展开语法时,和调用没有区别,就是把数组展开没了!
这是在直接使用时,前面说过用方法添加开头结尾,现在有了展开语法就不需要用方法来添加了
let i = ["秋刀鱼","鱼","鲨鱼"];
console.table(i.push("鱼"));
console.log(i);//传统方法
console.log("海域",...i,"鱼","鲨鱼","haiyu");//展开语法
那么可以用在随心添加呢?很显然,不能,因为展开语法是三个。。。还是只能用splice()
注意,这个和切片slice()方法不一样,我就经常记错。。。
总结
展开函数的本质是数组类型的转换,把调用函数的值转换成数(组)字更好控制
用展开语法会更好的添加元素,不像哪些方法,返回的值还不是原本数组,例如上面那个在末尾添加下标元素,返回的值是4,这个意思是下标为4的元素的下标
展开语法,就是为了更好控制元素,因为这是数组的优势,为什么本质上是数组类型的转换!
//那么到现在数组类型的转换已经不下7种方法了//