# 1:rest and spread操作符 --- ...args
No 1 : 用來聲明任意數量的方法參數
function test(...args) {
args.forEach(function (arg) {
console.log(arg)
})
};
test(1, 2, 3, 4);
//打印1,2,3,4
轉JS:
function test() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
args.forEach(function (arg) {
console.log(arg);
});
};
test(1, 2, 3, 4);
No 2:也可以對聲明了固定數量參數的函數進行參數數量不等的調用
function test(a,b,c) {
console.log(a);
console.log(b);
console.log(c);
};
var arr = [1, 2];
test(...arr);//打印1,2,undefined
var arr2 = [1, 2, 3, 4, 5, 6];
test(...arr2);//只識別前三個參數,打印1,2,3
# 2:generator函數
No 1:控制函數的執行過程
No 2:通過function*聲明一個generator函數在函數中添加yield和next()可對其進行打斷和分布執行操作
function* test(){
console.log("start");
yield;
console.log("finish");
}
var fun1 = test(); ??//須將函數聲明為變量使用此方法
fun1.next();
fun1.next();
每個.next()執行yield分割的一段代碼,第一個fun1.next();執行至yield之前停止打印出"start",第二個fun1.next()執行之后的代碼,打印出"finish"
# 3:destructuring?析構表達式
No 1:通過表達式將對象或數組拆解成任意數量的變量
function fun() {
? ? return {
? ? ? ? title:"xxj",
? ? ? ? total:36
? ?}
}
var { title , total?} =fun(); //變量名與函數中的屬性名對應相同
var { title :name , total?} =fun(); // 或者起個別名
console.log(title);
console.log(name);
這句話等價于 ?如下:
var aa =fun();
var title = aa.title;
var total = aa.total;
No 2:析構表達式的嵌套 ?--- 從對象拆值
function fun() {
? ?return {
? ? ? ?title:"xxj",
? ? ? ? total:{
? ? ? ? ? ? ? total1:25,
? ? ? ? ? ? ? total2:57
? ? ? ?}
? ?}
}
var { title , total:{ total2 } } =fun();
console.log(total2);
No 3:析構表達式的嵌套? --- 從數組拆值
var arr = [1,2,3,4];
var [num1,num2]=arr;
console.log(num1,num2); ? ?//1 2
var [,,num3,num4]=arr;
console.log(num3,num4); ? ? //3 4 用逗號空出對應位置即可跳躍取值
var [num5,,num6]=arr;
console.log(num5,num6); ? ?//1 3
var [num7,...others]=arr;
console.log(num7,others); ?//1 [2,3,4] *此時將剩余的三個數打包放進others中