JavaScript ES 6の新しい特性:構成値、展開文法、残りのパラメータ
31454 ワード
ES 6新規特性の値分解、展開文法、残りのパラメータ構成値 構文化配列 基本動作 交換変数 変数の一部を捨てる デフォルト値 拡張オブジェクト 基本動作 新しい変数 を宣言します.デフォルト値 新しい変数+標準値 を宣言します.関数のデフォルト値 構文展開 関数呼び出し new新規オブジェクトの場合 字面量配列 字面量オブジェクト 残パラメータ 参考資料
割り当て値
解配列
基本操作
jsもついにこの文法を支持しました.
関数が行列に戻ると、配列から要素を取って値を決める必要があるので、これが便利です.
基本操作
新しい変数npc 1,npc 2を宣言しました.
配列と同じです
上の二つの機能の組み合わせです.
関数の呼び出し
明らかに配列デ重量
注意すべきはこの展開は浅い複製(1つの層だけを巡回)であり、入れ子が多い場合は注意しなければなりません.元のオブジェクトに意図的に変更されます.
配列または関数パラメータに展開文法を使用すると、このシンタックスは反復可能なオブジェクトにのみ使用できます.下の例は
残りのパラメータは
解構賦課値Destructuring_assignment展開文法Spread syntax残パラメータReset_parameters
ES6
.5.1
版以降の次世代JS
規格.カバーECMAScript 2015、ECMAScript 2016、ECMAScript 2017
そのうち15
は正式版です.16,17
ただいるだけです15
ベースのパッチです.割り当て値
解配列
基本操作
var arr = [1 , 2];
var [a, b] = arr;
console.info(a, b); // 1 2
変数を交換jsもついにこの文法を支持しました.
var x = 1, y = 2;
[x, y] = [y, x];
console.info(x, y); // 2 1
変数の一部を捨てる関数が行列に戻ると、配列から要素を取って値を決める必要があるので、これが便利です.
var [a, , , d] = [1, 2, 3, 4];
console.log(a); // 1
console.log(d); // 4
標準値//
var [a, b='B', c='C', d] = [1, 2, 3, 4];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
console.log(d); // 4
//
var [a, b='B', c='C', d] = [1, , , 4];
console.log(a); // 1
console.log(b); // B
console.log(c); // C
console.log(d); // 4
// undefined 。 null , null
var [a, b='B', c='C', d] = [1, undefined, undefined, 4];
console.log(a); // 1
console.log(b); // B
console.log(c); // C
console.log(d); // 4
オブジェクトを解く基本操作
var obj = {a:1 , b:2};
var {a, b} = obj ;
console.info(a, b); // 1 2
新しい変数を宣言新しい変数npc 1,npc 2を宣言しました.
var obj = {a: ' ' , b: ' '};
var {a: npc1, b: npc2} = obj ; // obj.a npc1, obj.b npc2
console.info(npc1, npc2); //
標準値配列と同じです
var {npc1 = ' ' , npc2 = ' '} = {npc2: ' '};
console.log(npc1); //
console.log(npc2); //
新しい変数+標準値を宣言します.上の二つの機能の組み合わせです.
var {npc1:a = ' ' , npc2:b = ' '} = {npc2: ' '};
console.log(a); //
console.log(b); //
関数の標準値function foo({npc = ' ', npcLoc = { x: 9527, y: 2046 }, hp = 10000} = {}){
console.log(npc, npcLoc, hp);
}
foo(); // {x: 9527, y: 2046} 10000
foo({npc:' ', npcLoc:{ x: 0, y: 0}}); // {x: 0, y: 0} 10000
文法を展開関数の呼び出し
//
function foo(a,b,c){
console.info(' : ' + a);
console.info(' : ' + b);
console.info(' : ' + c);
}
//
var arr = ['666','999','9527'];
//
foo.apply(null, arr);
//
foo(...arr);
new新規オブジェクトの場合明らかに
apply
はいいですが、new
の新しい相手の時にはあまり使いませんでした.展開文法があったら、この気まずい結果になります.var result = [...new Set([1,1,2,2,3,3,4,4])];
console.info(result);// [1, 2, 3, 4]
//
var arr = [1,1,2,2,3,3,4,4];
var myset = new Set(arr);//
var result = [...myset];
console.info(result);// [1, 2, 3, 4]
時間オブジェクトの作成new Date(...[2019,10,05]);
new Date(..."2019-10-05".split("-"));
new Date("2019-10-05");
文字列数配列注意すべきはこの展開は浅い複製(1つの層だけを巡回)であり、入れ子が多い場合は注意しなければなりません.元のオブジェクトに意図的に変更されます.
//
var a = [1,2,3], b = [4,5,6];
var arr = [...a, ...b];
console.info(arr);// [1, 2, 3, 4, 5, 6]
//
var arr = [...a, ...b, ...a];
console.info(arr);// [1, 2, 3, 4, 5, 6, 1, 2, 3]
文字どおり対象を量る配列または関数パラメータに展開文法を使用すると、このシンタックスは反復可能なオブジェクトにのみ使用できます.下の例は
jQuery
の$extedに似ています.var obj1 = { 'year': '2019', 'month': '10' };
var obj2 = { 'year': '2020', 'day': '05' };
var obj3 = {...obj1, ...obj2};
// year , 。 month day , 。
console.info(obj3);// {year: "2020", month: "10", day: "05"}
// , 。
obj3.year = "2046";
obj3.month = "12";
obj3.day = '31';
console.info(obj3);// {year: "2046", month: "12", day: "31"}
console.info(obj1);// {year: "2019", month: "10"}
console.info(obj2);// {year: "2020", day: "05"}
残りのパラメータ残りのパラメータは
配列にラッピングされています.これはargmentsに対して言います.//
function foo(a,b,c,...arr){
console.info(' : ' + a);
console.info(' : ' + b);
console.info(' : ' + c);
console.info(' ' + Array.isArray(arr) + ': ' + arr);
}
foo(1,2,3,4,5,6,7,8,9);
/*
: 1
: 2
: 3
true: 4,5,6,7,8,9
*/
参考資料解構賦課値Destructuring_assignment展開文法Spread syntax残パラメータReset_parameters