解構(gòu)賦值
解構(gòu)賦值
變量的賦值可以按照一定的模式批量賦值
數(shù)組模式
根據(jù)下標一一對應(yīng)賦值
var [a,b,c] = [1,2.3]
等同于
var a =1;
var b =2;
var c=3
- 多維數(shù)組同理
- 解構(gòu)失敗時賦值為undefined
var [a,b] = [1];
//a =1;
//b=undefined; - 設(shè)默認值
var [a,b=2] = [1];
//a=1;
//b=2;
對象模型
根據(jù)key值一一對應(yīng)賦值,注意此時value應(yīng)該是變量而非字符串。
var {a:a,b:b}={a:1,b=2};
//ES6對象key省略時,key value同名,也可以寫成這樣
var {a,b} = {a:1,b:2};
- 解構(gòu)失敗為undefined
var {c} = {a:1,b:2};
//c=undefined; - json形式時,也是一一對應(yīng),位置相同即可
- 默認值
var {a,b=2}={a:1};
//b=2; - 對于已定義的變量,使用對象模式需要注意(),否則等號兩邊被認為是兩個代碼塊。
let a ;
{a}={a:1};
//SyntaxError
let b ;
{={b:2}};
//b=2;
其他情況
- 當右邊表達式是字符串,類似數(shù)組,也是根據(jù)下標計算。
const [a,b,c]='123''
//a='1';b='2';c='3'' - 當右邊是其他類型時會被轉(zhuǎn)為對象,在進行解構(gòu)賦值。
注:null和undefined無法轉(zhuǎn)為對象,會報錯。
其他應(yīng)用
- 函數(shù)參數(shù)
//形參寫成數(shù)組
function fn([a,b]){
...
};
fn([1,2]);
//形參寫成對象,不必考慮傳入順序
function fn (a,b){
..
};
fn({b:2,a:1});
- 形參默認值的2種寫法,一種是解構(gòu)賦值寫法,一種是ES6中形參設(shè)置默認值的方式
funtion fn({a,b}={1,2}){
...
};
- 函數(shù)返回多個值,一次性接收
function fn(){
return [1,2,3]
};
let [a,b,c]=fn();
- 交換值
[y,x]=[x,y]
數(shù)組(一)
ES6數(shù)組新增的方法(部分為ES5方法)
1.concat()
合并數(shù)組,該方法會改變原數(shù)組
2.reverse()
反轉(zhuǎn)數(shù)組
3.Array.isArray()
判斷是否是數(shù)組,等效于Object.prototype,toString.call(xx)==="[objectArray]"
4.forEach(fn(val,index,arr))
ES5的方法,低版本瀏覽器不兼容,此方法用來遍歷數(shù)組,參數(shù)中arr指數(shù)組本身,arr.forEach(function(val,index,arr){...})
5.map(fn(val,index,arr))
遍歷,返回一個新數(shù)組,此函數(shù)參數(shù)為數(shù)組中的單個值(react中用較多)
var numbers = [1,2,3];
numbers.map(function(n){
return n+1;
});
//[2,3,4]
6.filter(fn(val,index,arr))
過濾,返回一個新數(shù)組,它由fn函數(shù)返回true時的val組成
let arr= [3,4,5.6.7]
arr.filter(function(val){
return val>4;
})
//[[5,6,7]
7.some(fn(val,index,arr))
查找,其中一個值經(jīng)過函數(shù)處理返回了true,則返回true,認為數(shù)組中包含符合條件的值
let arr=[2,3,4,5,6];
arr.some(function(elem,index,arr){
return elem>=3
});
//true
8.every((val,index,arr))
類似some,fn都返回true,則返回true
9.reduce(fn(val,index,arr),ex)
合并,返回ex,默認是數(shù)組中的第一個val,也可以用第二參數(shù)指定
let arr=[1,2,3,4,5];
arr.reduce(function(ex,val){
return ex+val;
},10);
//25
let json=['aaa','bb','c'];
json.reduce(function(logest,entry){
return.entry.length>longest.length?entry:longest;
},");
9.find(fn(val,index,arr))
查找第一個符合fn的值,fn應(yīng)該返回t/f,差不到返回undefinde
let arr= [1,2,3]
arr.find(function(val){
return val>1;
})
//2
比indexof強大,且可查找NaN
- findindex(fn(val,index,arr))
類似find,返回符合fn的下標,查不到返回-1。
11.keys()返回數(shù)組所有key組成的遍歷器對象
遍歷器對象在后面詳解,它可以使用for.....of遍歷
let arr=[1,2,3]
for (let i of arr.keys()){
console.log(i)
}
//1,2,3
12.valus()類似keys(),返回所有value
13.entries()返回所有key value
var arr = [1,2,3]
for(let i of arr.entries()){
console.log(i)
}
//[0,1] [下標,值] //[1,2] //[2,3]
14.Array.from(arrlike,[fn(value)])
將數(shù)組轉(zhuǎn)化為數(shù)組,替代Arrar.prototype.slice,call,fn用來返回新值。
常見的類數(shù)組
- DOM操作返回的是節(jié)點集合
let p = document.getElementsByTagName("p");
Array.from(p).forEach(fn...);
//正常情況下頁可使用for循環(huán),長度為類數(shù)組的length
- 函數(shù)內(nèi)部的anguments也是累數(shù)組
注:具有l(wèi)terator接口的都可使用Array.from()
除了上述方法以外,還有其他諸如數(shù)組填充fill()等不怎么用到的方法,這里就不再列出。