首頁 >web前端 >js教程 >傳播和休息運算符

傳播和休息運算符

WBOY
WBOY原創
2024-08-21 06:10:051225瀏覽

Spread & Rest Operator

  • 從現有數組形成一個字元噪音較少的新數組。
  • Spread 將元素提取為值。它是一個不可變的函數。
  • [] 是寫入新數組的方式。因此,展開不會改變原始數組。
  • Spread 適用於所有可迭代對象,而不僅僅是陣列。
  • Iterables:字串、陣列、映射、集合,即除了物件資料類型之外的大多數內建資料結構。
  • 與解構的差異:從數組中提取所有元素,並且不建立新變量,僅在需要值 CSV 的地方使用。
  • 當我們建立數組或將值傳遞給函數時使用。
const nums = [5,6,7];
const newNums = [1,2, nums[0],nums[1],nums[2]];
console.log(newNums); // [ 1, 2, 5, 6, 7 ]

is reduced to 

const nums = [5,6,7];
const newNums = [1,2, ...nums];
console.log(newNums); // [ 1, 2, 5, 6, 7 ]
console.log(...newNums); // 1 2 5 6 7

1. 將兩個數字組合併在一起

const arr1 = [1,2,3,4,5];
const arr2 = [6,7,8,9];

let nums = [...arr1,...arr2];
nums; // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]


const firstname = "Peter";
const fullName = [...firstname,' ',"P."];
fullName; // [ 'P', 'e', 't', 'e', 'r', ' ', 'P.' ]

console.log(...firstname); // 'P' 'e' 't' 'e' 'r'
  • 錯誤來源:擴充運算子在範本字串中不起作用,因為範本字串不希望其中有多個值。

2. 建立數組的淺拷貝

const girl = {
  name: 'Melania',
  friends: ['Alina', 'Alice', 'Ayesha', 'Anamika', 'Anaya']
};

const frnz = [...girl.friends];
console.log(frnz); // [ 'Alina', 'Alice', 'Ayesha', 'Anamika', 'Anaya' ]
console.log(girl.friends); // [ 'Alina', 'Alice', 'Ayesha', 'Anamika', 'Anaya' ]

Spread 也適用於對象,即使它們不是可迭代的。

let male = {
  "firstName": "Gangadhar",
  "lastName": "Shaktimaan"
}

let female = {
  "firstName": "Geeta",
  "lastName": "Vishwas"
}

let x = {...male, born: 1950};
let y = {...female, born: 1940};

x; // { firstName: 'Gangadhar',   lastName: 'Shaktimaan',   born: 1950 }
y; // { firstName: 'Geeta',  lastName: 'Vishwas',  born: 1940 }```




## Shallow Copy of objects:

let male = {
  "firstName": "Gangadhar",
  "lastName": "Shaktimaan"
}

let character = {...male, firstName: 'Wonderwoman'};

male;         // { firstName: 'Gangadhar', lastName: 'Shaktimaan' }
character;    // { firstName: 'Wonderwoman', lastName: 'Shaktimaan' }

- First name for character object is changed although it was extracted from male object


休息模式和休息參數:

  • Rest 的作用與 spread 相反,但具有與 spread 相同的語法。
  • Spread 用於建立新數組或將值傳遞給 fn。在這兩種情況下,擴展都用於擴展元素。
  • Rest 使用相同的語法,但將這些值壓縮為單一
  • Spread 用於從數組中解包元素,rest 用於將元素打包到數組中。 ````

展開運算子和剩餘運算子的語法差異:
擴充運算子=> ...用於賦值運算子的 RHS。
const nums = [9,4, ...[2,7,1]];

休息運算子=> ...將位於具有解構的賦值運算子的 LHS
const [x,y,...z] = [9,4, 2,7,1];

## Rest syntax collects all the elements after the last elements into an array. Doesn't include any skipped elements. 
- Hence, it should be the last element in the destructuring assignment.
- There can be only one rest in any destructuring assignment.

let Diet = ['披薩', '漢堡','麵條','烤','壽司','dosa','uttapam'];

讓[第一,第三,...其他] =飲食;
首先;
第三;
其他;

- Rest also works with objects. Only difference is that elements will be collected into a new object instead of an arrray.

let days = { 'mon':1,'tue':2,'wed':3,'thu':4,'fri':5,'sat':6,'sun':7};
讓 {週六、週日、...工作} = 天;
放開= {週六,週日};

工作; // { 週一:1,週二:2,週三:3,週四:4,週五:5 }
離開; // { 週六: 6, 星期日: 7 }

- Although both look same, but they work differently based on where they are used.

休息和傳播的微妙區別:

  • 擴充運算子用於寫入以逗號分隔的值
  • 使用休息模式,我們將編寫用逗號分隔的變數名稱。

以上是傳播和休息運算符的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn