第5章解体(destructure)
7140 ワード
構造を解く
解凍とは、ES 6が新たに追加した機能であり、構成を解くとは、複雑なデータ構造を小さい部分に分割することを意味する.ES 6は、オブジェクトの字面量と配列の字面量(Aray literals)との解を追加します.以下は3つの面から構成について説明します.オブジェクト解凍(object destruct); 配列解除(array destructure); 関数パラメータ構成 一.オブジェクトの解凍
オブジェクトの解構使用対象の字面量は式の左側にあり、対象の字面量属性初期化器と文法が一致します.
上記の例は変数宣言を使用する方法であり、変数名はすでに宣言されています.再割当対象の字面量分解賦値は括弧を使用しなければなりません.
分割された値の場合、ローカル変数はオブジェクトに存在しない場合、デフォルト値はundefinedであり、デフォルト値を提供することができます.
上記の例では、私達は属性名を変数名として使っています.この変数名を変えることができます.
解凍は任意の深さの入れ子に使用できます.
データの構造とオブジェクトの構造は大同小異ですが、名前付き属性によるものではなく、インデックス位置によるものです.もう一つの点は、配列の固有値は括弧で包む必要がないということです.
オブジェクトの解凍と同じように、行列内の値がデフォルトではundefinedとして設定されていません.別の標準値を提供することができます.
1.残りの項目は...構文(任意のパラメータ、spread操作符と同じ)を使って配列に残っている項目を表します.同じret itemsは最後まで置かなければなりません.
オブジェクトの解と配列の解を結合して、より複雑なデータ構造を抽出することは、JSON構成構造の抽出にとって非常に有用である.
オブジェクトの構成は、デフォルト値、ミキシングなどの特性を持っています.構成パラメータはすべて1を持っています.js関数に多くのオプションパラメータが必要な場合、一般的には、Ooptionsオブジェクトに入力されます.属性は他のオプションパラメータです.
解構成の出現はデータの抽出に直観的な構造を提供しており、配列解はまた他の機能を提供しています.例えば、2つの数を交換したり、rest itemsを交換したりします.
解凍とは、ES 6が新たに追加した機能であり、構成を解くとは、複雑なデータ構造を小さい部分に分割することを意味する.ES 6は、オブジェクトの字面量と配列の字面量(Aray literals)との解を追加します.以下は3つの面から構成について説明します.
オブジェクトの解構使用対象の字面量は式の左側にあり、対象の字面量属性初期化器と文法が一致します.
let node = {
type: "javascript",
name: "main"
};
//
let {type, name} = node; // node
console.log(type); // "javascript"
console.log(name); // "main"
//
var type = node.type;
var name = node.name;
1.分配値上記の例は変数宣言を使用する方法であり、変数名はすでに宣言されています.再割当対象の字面量分解賦値は括弧を使用しなければなりません.
let node = {
type: "javascript",
name: "main"
},
type = "literals",
name = "whatever";
// ()
({type, name} = node);
console.log(type); // "javascript"
console.log(name); // "main"
構成表式の最後の値は等号の右側の値で、上の例はnodeです.let node = {
type: "javascript",
name: "main"
},
type = "literals",
name = "whatever";
function outputInfo(value) {
console.log(value === node);
}
outputInfo({type, name} = node); // node, true
console.log(type); // "javascript"
console.log(name); // "main"
2.標準値分割された値の場合、ローカル変数はオブジェクトに存在しない場合、デフォルト値はundefinedであり、デフォルト値を提供することができます.
let node = {
type: "javascript",
name: "main"
};
let {type, name, someProperty} = node;
console.log(someProperty); // undefined
//
let {type, name, someProperty = true} = node;
console.log(someProperty); // true
3.ローカル変数名を変更する上記の例では、私達は属性名を変数名として使っています.この変数名を変えることができます.
let node = {
type: "javascript",
name: "main"
};
let {type: localType, name: localName} = node;
//
var localType = node.type;
var localName = node.name;
4.ネストオブジェクトの解凍解凍は任意の深さの入れ子に使用できます.
let node = {
type: "javascript",
name: "main",
loc: {
start: {
rows: 1
columns: 3
},
end: {
rows: 5,
columns: 19
}
}
};
let {loc: { start }} = node;
//
var start = node.loc.start;
//
let {loc: { start: localStart }} = node;
//
var localStart = node.loc.start;
console.log(localStart.rows); // 1
console.log(localStart.columns); // 3
二.配列の解体データの構造とオブジェクトの構造は大同小異ですが、名前付き属性によるものではなく、インデックス位置によるものです.もう一つの点は、配列の固有値は括弧で包む必要がないということです.
let colors = ["red", "yellow", "green"];
let [firstColor, secondColor] = colors;
//
var firstColor = colors[0]; // "red"
var secondColor = colors[1]; // "yellow"
属性を無視して、希望の属性だけを解くこともできます.let colors = ["red", "yellow", "green"];
let [, , thirdColor] = colors;
//
thirdColor = colors[2]; // "green"
1.分配値let colors = ["red", "yellow", "green"],
firstColor = "blue",
secondColor = "pink";
// , {}
[firstColor, secondColor] = colors;
//
var firstColor = colors[0]; // "red"
var secondColor = colors[1]; // "yellow"
配列分解値には他の特別なユニークな使用があります.相互作用の2つの属性の値eg:let a = 1,
b = 2;
// , : =
[a, b] = [b, a];
console.log(a); // 2
console.log(b); // 1
2.標準値オブジェクトの解凍と同じように、行列内の値がデフォルトではundefinedとして設定されていません.別の標準値を提供することができます.
let colors = ["red"];
let [firstColor, secondColor = "green"] = colors;
//
var firstColor = colors[0];
var secondColor = "green";
console.log(firstColor); // "red"
console.log(secondColor); // "green"
3.ネスト配列解凍let colors = ["red", ["pink", "aqua"], purple];
let [redColor, [pinkColor]] = colors;
//
var redColor = colors[0];
var pinkColor = color[1][0];
4.rest items(…)1.残りの項目は...構文(任意のパラメータ、spread操作符と同じ)を使って配列に残っている項目を表します.同じret itemsは最後まで置かなければなりません.
let colors = ["red", "yellow", "green"];
let [firstColor, ...restColors] = colors;
console.log(firstColor); // "red"
restColors.length; // 2
restColors[0]; // "yellow"
restColors[1]; // "green"
//
var restColors = ["yellow", "green"]
2.配列のもう一つの見落とされやすい能力は、快速に1つの配列を割り当て、concat方法を使用することである.let colors = ["red", "yellow", "green"];
let cloneColors = colors.concat();
console.log(cloneColors); // ["red", "yellow", "green"]
この目的を達成するためにrest itemsを使用します.let colors = ["red", "yellow", "green"];
let [...cloneColors] = colors;
三.ハイブリッドオブジェクトの解と配列の解を結合して、より複雑なデータ構造を抽出することは、JSON構成構造の抽出にとって非常に有用である.
let node = {
type: "javascript",
name: "main",
loc: {
start: {
rows: 1,
columns: 1
},
end: {
rows: 2,
columns: 2
}
},
range: [0, 3]
};
let {
loc: { start },
range: [ startIndex ]
} = node;
//
var start = node.loc.start; // {rows: 1, columns: 1}
var startIndex = node.range[0]; // 0
四.構成パラメータオブジェクトの構成は、デフォルト値、ミキシングなどの特性を持っています.構成パラメータはすべて1を持っています.js関数に多くのオプションパラメータが必要な場合、一般的には、Ooptionsオブジェクトに入力されます.属性は他のオプションパラメータです.
function setCookie(name, value, options) {
options = options || {};
let secure = options.secure,
path = options.path,
domain = options.domain,
expires = options.expires;
// other code here ...
}
//
setCookie("type", "js", {
secure: true,
expires: 60000
});
2.構文パラメータは、オブジェクトの解凍または配列の解体を使用して、named parameterの代わりに、次のように書くことができます.function setCookie(name, value, {secure, path, domain, expires}) {
// other code here ...
}
//
setCookie("type", "js", {
secure: true,
expires: 60000
});
構造パラメータは本質的には構成宣言の簡略化である.function setCookie(name, value, options) {
let {secure, path, domain, expires} = options; //
// ...
}
このような書き方には問題があります.つまり、解構パラメータが必要になります.省略することはできません.第3のパラメータを与えないため、自動的にundefinedとなります.解構声明では、解構右値がnull、undefinedの場合、エラーが発生します.setCookie("type", "js"); //
3.上のoptionsが必須パラメータという書き方なら大丈夫ですが、optionsがオプションであれば別の書き方として書きます.function setCookie(name, value, {secure, path, domain, expires} = {}) {
// other code here ...
}
//
setCookie("type", "js"); // OK
// , secure undefined
4.構文パラメータのデフォルトパラメータfunction setCookie(name, value,
{
secure = true,
path = "/",
domain = "example.com",
expires = new Date(Date.now() + 3600000000)
} = {}
) {
// ...
}
締め括りをつける解構成の出現はデータの抽出に直観的な構造を提供しており、配列解はまた他の機能を提供しています.例えば、2つの数を交換したり、rest itemsを交換したりします.