Đối tượng Wrapper trong JavaScript
Bài viết này giải thích về đối tượng wrapper trong JavaScript.
YouTube Video
Các đối tượng bao bọc
JavaScript có các kiểu dữ liệu nguyên thủy và các đối tượng để xử lý chúng (đối tượng bao bọc).
Các kiểu dữ liệu nguyên thủy
Các kiểu dữ liệu nguyên thủy đại diện cho một giá trị đơn lẻ và đơn giản cũng như nhẹ nhàng. Chúng là bất biến (không thể thay đổi) và không trực tiếp có các phương thức hoặc thuộc tính đối tượng, nhưng chúng có thể được tạm thời chuyển đổi thành các đối tượng gói để thực hiện các thao tác.
string và number là các ví dụ về kiểu dữ liệu nguyên thủy. Ngược lại, các đối tượng bao bọc bắt đầu bằng chữ cái viết hoa, như String và Number.
Đối tượng Wrapper
Để thao tác với các kiểu nguyên thủy, JavaScript tạm thời tạo các đối tượng bao bọc (Object wrappers). Các đối tượng bao bọc chứa các phương thức và thuộc tính cho các kiểu nguyên thủy.
Number
1let numObject = new Number(42); // Wrapper object
2
3console.log(typeof numObject); // object
4console.log(numObject.valueOf()); // 42
5
6let numValue = Number(42); // Return primitive value
7
8console.log(typeof numValue); // number
9console.log(numValue); // 42
Numberlà một kiểu đối tượng bao bọc mộtnumbernguyên thủy. Bằng cách tạo rõ ràng một đối tượngNumber, bạn có thể xử lý các số như mộtnumber, nhưng thông thường, nên sử dụng kiểu nguyên thủynumber.
typeof numObjectlà"object", nhưngtypeof 42là"number".
- Lưu ý rằng, sử dụng toán tử
newđể tạo một đối tượng bao bọc mới sẽ cho kết quả khác so với việc gọiNumbernhư một hàm. Khi được gọi dưới dạng một hàm, một kiểu nguyên thủynumbersẽ được trả về.
String
1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject); // object
4console.log(strObject.valueOf()); // Hello
- Nó là một kiểu đối tượng bao bọc một
stringnguyên thủy. Bằng cách sử dụng một đối tượngString, bạn có thể truy cập các thuộc tính và phương thức của chuỗi, nhưng thông thường mộtstringnguyên thủy được sử dụng.
typeof strObjectlà"object", nhưngtypeof "Hello"là"string".
- Giống như
Number, gọiStringnhư một hàm sẽ trả về mộtstringnguyên thủy.
Boolean
1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject); // object
4console.log(boolObject.valueOf()); // true
- Nó là một kiểu đối tượng bao bọc một
booleannguyên thủy. Bạn cũng có thể tạo rõ ràng một đối tượngBoolean, nhưng thông thường kiểu nguyên thủybooleanđược sử dụng.
typeof boolObjectlà"object", nhưngtypeof truelà"boolean".
- Tương tự như
Number, gọiBooleannhư một hàm sẽ trả về mộtbooleannguyên thủy.
BigInt
1let bigIntObject = Object(9007199254740991n); // Wrapper object
2
3console.log(typeof bigIntObject); // object
4console.log(bigIntObject.valueOf()); // 9007199254740991n
5
6let bigIntValue = BigInt(9007199254740991); // Return primitive BigInt
7
8console.log(typeof bigIntValue); // bigint
9console.log(bigIntValue); // 9007199254740991n
10
11// Error
12let bigIntObject2 = new BigInt(9007199254740991n);Objectを使ってBigIntのラッパーオブジェクトを生成できますが、通常はプリミティブ型のbigintを直接使うのが一般的です。
typeof bigIntObjectは"object"であるのに対し、typeof 9007199254740991nは"bigint"です。
BigIntを関数として呼び出すとプリミティブなbigintを返しますが、new演算子をつけてBigIntのラッパーオブジェクトを生成することはできません。
Symbol
1let symObject = Object(Symbol("id")); // Wrapper object for Symbol
2
3console.log(typeof symObject); // object
4console.log(symObject.valueOf()); //
- Bạn có thể sử dụng
Objectđể tạo một đối tượng bao bọc choSymbol, nhưng thông thường, bạn sử dụng trực tiếp kiểu nguyên thủySymbol.
Sự khác biệt giữa các kiểu nguyên thủy và các đối tượng bao bọc
- Các kiểu nguyên thủy nhẹ và hiệu quả về bộ nhớ, nhưng chúng không có các thuộc tính hoặc phương thức trực tiếp. Tuy nhiên, trong JavaScript, ngay cả với các kiểu nguyên thủy, các đối tượng bao bọc tạm thời được tự động tạo khi cần thiết để cung cấp các phương thức và thuộc tính.
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);- Các đối tượng bao bọc là các đối tượng được tạo ra rõ ràng và có thể ảnh hưởng đến bộ nhớ và hiệu suất, vì vậy thường khuyến nghị sử dụng các kiểu nguyên thủy.
Kết luận
- Kiểu Dữ Liệu Nguyên Thủy: Các kiểu dữ liệu nhẹ như
number,string,boolean,null,undefined, vàsymbolkhông có phương thức trực tiếp. - Đối Tượng Bọc: Các đối tượng như
Number,String, vàBooleanđược chuyển đổi tạm thời từ các kiểu dữ liệu nguyên thủy.
Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.