Rate this post

Xin chào mọi người! Để tiếp tục loạt bài về Javascript, hôm nay mình sẽ giới thiệu về một toán tử vô cùng hữu ích, đó chính là “spread operator,” được ký hiệu bằng dấu ba chấm (…). Spread operator là một công cụ mạnh mẽ và ngắn gọn được sử dụng trong các thao tác xử lý mảng, chẳng hạn như thêm phần tử vào mảng, kết hợp mảng (hoặc đối tượng), truyền các tham số từ mảng vào hàm, và nhiều thao tác khác nữa. Hãy cùng W3seo đào sâu để hiểu rõ hơn về spread operator này.

Định nghĩa về spread operator

Spread operator (dấu …) trong JavaScript là một tính năng mới trong ECMAScript 6 (ES6) cho phép bạn truyền nhiều giá trị hoặc các phần tử của một mảng hoặc đối tượng vào một hàm hoặc tạo ra một mảng mới.

Spread operator là một tính năng quan trọng trong Javascript, được ký hiệu bằng dấu ba chấm (…). Trong ngữ cảnh của Javascript, spread operator được định nghĩa như việc sử dụng dấu ba chấm để “mở rộng” một đối tượng có thể lặp (iterable object) thành một danh sách các đối số trong một cuộc gọi hàm.

Theo định nghĩa từ Javascript.info:

“Khi …arr được sử dụng trong cuộc gọi hàm, nó ‘mở rộng’ một đối tượng có thể lặp arr thành danh sách các đối số.”

Spread operator được thêm vào Javascript từ phiên bản ES6 (ES2015), tương tự như rest parameter. Cả hai loại operator này có cú pháp tương đồng, đều sử dụng dấu ba chấm (…) để thực hiện các thao tác mở rộng và thu gọn trên các đối tượng.

Dấu ba chấm (…) được sử dụng để thực hiện những công việc gì?

Theo JavaScript.info, “Spread operator to the rescue! It looks similar to rest parameters, also using …, but does quite the opposite.”

Hãy xem xét một ví dụ cơ bản nhất để hiểu rõ hơn, đó là trong việc tìm số lớn nhất trong một mảng:

Math.max(1, 3, 5) // output: 5
Math.max([1, 3, 5]) // output: NaN

Khi chúng ta truyền một mảng 3 phần tử như một tham số của hàm (ở đây là hàm Math.max()), chúng ta mong muốn rằng hàm này sẽ hiểu rằng chúng ta đang truyền vào 3 tham số riêng biệt để tìm số lớn nhất. Tuy nhiên, nếu viết như vậy, hàm sẽ không hiểu và kết quả là NaN. Đây là lúc chúng ta cần sử dụng spread operator, bằng cách thêm dấu … vào phần argument:

Math.max(...[1, 3, 5]) // output: 5

Ở đây, spread operator đã mở rộng (spread) mảng 3 phần tử thành 3 tham số riêng biệt.

Ngoài chức năng đã mô tả, spread operator còn có nhiều chức năng hữu ích khác, giúp code trở nên ngắn gọn và dễ đọc hơn. Các chức năng này bao gồm sao chép một mảng, tách hoặc kết hợp nhiều mảng, sử dụng mảng như danh sách các tham số, thêm một phần tử vào danh sách, thao tác với state trong React, kết hợp các đối tượng, và chuyển NodeList thành một mảng.

Một số ví dụ về spread operator (…)

Dưới đây là một số ví dụ khác về cách sử dụng spread operator (…):

  1. Sao chép một mảng:
   const originalArray = [1, 2, 3];
   const copiedArray = [...originalArray];
   console.log(copiedArray); // [1, 2, 3]
  1. Kết hợp mảng:
   const array1 = [1, 2, 3];
   const array2 = [4, 5, 6];
   const combinedArray = [...array1, ...array2];
   console.log(combinedArray); // [1, 2, 3, 4, 5, 6]
  1. Sử dụng mảng như danh sách tham số cho hàm:
   const numbers = [1, 2, 3];
   const sum = (a, b, c) => a + b + c;
   console.log(sum(...numbers)); // 6
  1. Thêm một phần tử vào mảng:
   const originalArray = [1, 2, 3];
   const newArray = [...originalArray, 4];
   console.log(newArray); // [1, 2, 3, 4]
  1. Sao chép và mở rộng đối tượng:
   const originalObject = { a: 1, b: 2 };
   const extendedObject = { ...originalObject, c: 3 };
   console.log(extendedObject); // { a: 1, b: 2, c: 3 }
  1. Sử dụng trong React để truyền props:
   const props = { id: 1, name: 'John' };
   const component = <MyComponent {...props} />;
  1. Chuyển NodeList thành một mảng:
   const nodeList = document.querySelectorAll('.items');
   const arrayFromNodeList = [...nodeList];

Spread operator giúp làm cho mã nguồn trở nên ngắn gọn và dễ đọc, đồng thời cung cấp một cách linh hoạt để xử lý mảng và đối tượng trong Javascript.

Những lưu ý khi sử dụng Spread operator 

  • Cần chú ý rằng spread operator không có thể sử dụng để sao chép một đối tượng hoặc mảng hoàn toàn mới, nó chỉ tạo ra một bản sao tham chiếu của đối tượng hoặc mảng gốc. Nếu muốn tạo ra một bản sao hoàn toàn mới thì cần sử dụng JSON.parse(JSON.stringify(object)) hoặc sử dụng các thư viện như lodash hay underscore.
  • Cần chú ý khi sử dụng spread operator với mảng hoặc đối tượng lồng nhau, sẽ gây ra lỗi hoặc không hoạt động như mong đợi.
  • Cần chú ý khi sử dụng spread operator với các thuộc tính hoặc phần tử của một đối tượng hoặc mảng không tồn tại, sẽ gây ra lỗi hoặc không hoạt động như mong đợi.
  • Cần chú ý khi sử dụng spread operator với các thuộc tính hoặc phần tử của một đối tượng hoặc mảng không tồn tại, sẽ gây ra lỗi hoặc không hoạt động như mong đợi.
  • Cần chú ý khi sử dụng spread operator với các tham số hoặc biến không phải là một mảng hoặc đối tượng, sẽ gây ra lỗi hoặc không hoạt động như mong đợi.
  • Cần chú ý khi sử dụng spread operator với các tham số hoặc biến có giá trị null hoặc undefined, sẽ gây ra lỗi hoặc không hoạt động như mong đợi.
  • Cần chú ý khi sử dụng spread operator với các tham số hoặc biến có giá trị không xác định, sẽ gây ra lỗi hoặc không hoạt động như mong đợi.
  • Cần chú ý khi sử dụng spread operator với các tham số hoặc biến có giá trị đã được sử dụng trước đó, có thể gây ra lỗi hoặc không hoạt động như mong đợi.

Ngoài ra, nếu bạn đang sử dụng spread operator với một mảng hoặc đối tượng lồng nhau, cần chú ý đến việc sử dụng từ khóa ‘deep’ để tránh lỗi hoặc không hoạt động như mong đợi.

Kết luận 

Spread operator là một tính năng mạnh mẽ trong JavaScript cho phép chúng ta truyền nhiều giá trị, tạo mới một mảng hoặc đối tượng, gán giá trị cho nhiều thuộc tính của một đối tượng, gộp nhiều đối tượng lại với nhau và sao chép một đối tượng hoặc mảng. Nhưng cũng cần chú ý khi sử dụng nó để tránh lỗi hoặc không hoạt động như mong đợi.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now