JS インタビューの質問 16-Es6 のイベント拡張機能はどのようなシナリオで使用されますか?

9337f7fa2dae3ae9718d1022ad02e050.jpeg

ES6 では、イベント拡張演算子を配列とオブジェクトの展開操作に使用できます。これは、配列をカンマ区切りのパラメーター シーケンスに変換したり、オブジェクトを複数のパラメーターの形式で関数に渡すために使用されます。以下はイベントスプレッドオペレーターの使用法と例です。

配列

配列の構築: スプレッド演算子を使用すると、push、などのメソッドを使用して既存の配列要素を新しい配列の一部にする必要がなく、より簡単かつエレガントに新しい配列を構築できます。例えばspliceconcat

スプレッド演算子は反復可能オブジェクトの各項目を出力します。

console.log(...[1,2,3]); // 1 2 3
console.log(1,...[2,3,4],5); // 1 2 3 4 5
console.log([1,...[2,3,4],5]); // [1, 2, 3, 4, 5]

使用法 1 - 配列のコピー

sliceスプレッド演算子を使用すると、メソッドを使用せずに配列を簡単にコピーできます。例えば

let arr = [1, 2, 3];
let arr2 = [...arr]; // [1, 2, 3]
arr2.push(4); 
console.log(arr2); // [1, 2, 3, 4]

使用法 2 - 配列のマージ

スプレッド演算子を使用すると、2 つの配列の結合がより簡単かつ洗練されます。例えば

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
var arr3 = [...arr1, ...arr2]; // [0, 1, 2, 3, 4, 5]
// 等同于
var arr4 = arr1.concat(arr2);
console.log(arr3, arr4); // [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5]
  1. 物体

オブジェクトの複製: スプレッド演算子を使用すると、オブジェクトの複製をより簡単に行うことができます。例えば

let obj = {a: 1, b: 2, c: 3};
let obj2 = {...obj}; // {a: 1, b: 2, c: 3}
obj2.d = 4; 
console.log(obj2); // {a: 1, b: 2, c: 3, d: 4}

使用法 3 - オブジェクトの結合

スプレッド演算子を使用すると、2 つのオブジェクトを結合することがより簡単かつ洗練されます。例えば

let obj1 = {a: 1, b: 2};
let obj2 = {c: 3, d: 4};
let obj3 = {...obj1, ...obj2}; // {a: 1, b: 2, c: 3, d: 4}
// 等价于
let obj1 = {a:1,b:2};
let obj3 = Object.assign(obj1,obj2);// {a: 1, b: 2, c: 3, d: 4}

オブジェクトの拡張演算子は、{...}パラメータ オブジェクト内のすべてのトラバース可能なプロパティを取り出し、現在のオブジェクトにコピーするために使用されます。このメソッドは、オブジェクトをマージし、Object.assignソース オブジェクト (ソース) のすべての列挙可能なプロパティをターゲット オブジェクトにコピーするために使用されます (目標)

Object.assignメソッドの最初のパラメータはターゲット オブジェクトで、次のパラメータはすべてソース オブジェクトです。ターゲット オブジェクトと元のオブジェクトに同じ名前のプロパティがある場合、または複数のソース オブジェクトに同じ名前のプロパティがある場合、後者のプロパティは以前のプロパティをオーバーライドする 

ユーザー定義の属性が拡張演算子の後に配置されると、拡張演算子内の同じ名前の属性は上書きされます。

let bar = {a: 1, b: 2};
 let baz = {...bar, ...{a:2, b: 4}};  // {a: 2, b: 4}

スプレッド演算子によるオブジェクト インスタンスのコピーは、一種の浅いコピーです。

参照データ型 たとえばArray、コピーする場合、コピーされるのはオブジェクトの参照であり、元のオブジェクトが変更されると、コピーされたオブジェクトも変更されます。

let obj1 = { a: 1, b: 2};
 let obj2 = { ...obj1, b: 'itclancoder'};
 console.log(obj1); // {a: 1, b: 2}
 console.log(obj2); //  {a: 1, b: "itclancoder"}

上記の例では、スプレッド演算子によってコピーされたオブジェクトは基本データ型であるため、obj2オブジェクトの変更は影響しません。obj1

let obj1 = { a: 1, b: 2, c: {name: 'a'}};
let obj2 = { ...obj1};
obj2.c.name = 'itclancoder';
console.log(obj1); // {a: 1, b: 2, c: {name: 'itclancoder'}}
console.log(obj2); // {a: 1, b: 2, c: {name: 'itclancoder'}}

ここで、 obj2 の変更がコピーされたオブジェクトに影響を与えることがわかりますobj1。理由は前述したように、obj1in のオブジェクトはc参照データ型であり、コピーはコピー時のオブジェクトの参照であるためです。

オブジェクトの構造化代入は、オブジェクトから値を取得するために使用されます。これは、ターゲット オブジェクト自体のすべての通過可能だが読み取られていないプロパティを指定されたオブジェクトに割り当てることと同じです。すべてのキーとその値が新しいオブジェクトにコピーされます

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
 x // 1
 y // 2
 z // { a: 3, b: 4 }

注: 分割代入では等号の右側がオブジェクトである必要があるため、等号の右側がundefinedまたはの場合null、オブジェクトに変換できないためエラーが報告されます。また、分割代入は最後のパラメータである必要があります。そうでない場合は、エラーが報告されます。

let { ...z } = null; // 运行时错误
 let { ...z } = undefined; // 运行时错误
 let { ...x, y, z } = someObject; // 句法错误
 let { x, ...y, ...z } = someObject; // 句法错误

スプレッド演算子の後に文字列が続く場合、文字列は自動的に配列のようなオブジェクトに変換されるため、戻り値は空の​​オブジェクトではありません。

{...'hello'}
 // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}

使用法 4 - React または Vue でのアプリケーション

React または Vue コンポーネントでは、スプレッド演算子を使用して props を渡すことができます。

const params = {name: 'Jine', age: 21}
<CustomComponent {...params} />

パラメータの受け渡しを構造化する

例: 配列の最大値と最小値を見つける

const arr = [2024,2,50,100];
const min = Math.min(...arr);
const max = Math.max(...arr);
console.log(min,max); // 2,2024

使用法 5 アレイ重複排除

拡張オペレータが連携してsetアレイの重複排除を実現

var arr = [2023,'itclancoder',2023, 1024, -9, -9, 2023, 1024, 2, 3, 2, 3, 6, 8,8,8,-8,'itclancoder','itclancoder']
var  set1= [...new  Set(arr)]
//可以直接写出var  set1= new  Set(arr)
//console.log(set1)
//方法1
var newArr=Array.from(set1)
console.log(newArr)
var arr = [2023,'itclancoder',2023, 1024, -9, -9, 2023, 1024, 2, 3, 2, 3, 6, 8,8,8,-8,'itclancoder','itclancoder']
var  set1= [...new  Set(arr)]
//可以直接写成var  set1= new  Set(arr)
//console.log(set1)
//方法2
var newArr= [...set1]
console.log(newArr)

使用法 6 - 文字列から文字配列へ

const name='itclancoder'
const strarr=[...name]
console.log(strarr)
//['i','t','c','l','a','n','c','o','d','e','r']
//进行简单的字符串截取
strarr.lenght=2
console.log(strarr.join(""));//‘it’

上記は展開演算子のいくつかの使用法です。

フレームワーク - インタビューの質問 6 - Vue2 と Vue3 のフック機能についての話

2023-03-09

136f1c16240c439e16ee5869a3c7909c.jpeg

インターネットでの操作がこの記事でわかる

2023-03-03

8955b19f3059d3e77016685e26362e8a.jpeg

履歴書の変更から面接まで知っておくべきこと

2023-03-02

f75748f5d1c8d16f3b2f44a4becd22db.jpeg

入社前に求職者が事前に理解しておくべき質問

2023-03-01

23aa3c9f89861df310762b1bec013fa9.jpeg

面接官から頻繁に転職することについて質問された場合、求職者はどのように答えるべきでしょうか。

2023-02-28

79deb5a834446c591e174993b0147396.jpeg

面接官のための反対尋問 - 職場での質問に答える方法

2023-02-26

2bf520e8a2717d4c7f5144c6db82d495.jpeg

インターネットの UI デザイナーを理解するための 1 つの記事

2023-02-25

be928caa94e430b14cb8707e7046313b.jpeg

インターネットでのテスト開発を理解するための記事

2023-02-24

069289e0b01455242f7af1c5b3557220.jpeg
さらに見るには左下隅をクリックしてください

87f00116170fbb1ec671bb012a70e6ca.gif

おすすめ

転載: blog.csdn.net/wzc_coder/article/details/129457571