Obiekty opakowujące w JavaScript
Ten artykuł wyjaśnia, czym są obiekty opakowujące w JavaScript.
YouTube Video
Obiekty Owijające
JavaScript posiada typy prymitywne oraz obiekty do ich obsługi (obiekty opakowujące).
Typy Prymitywne
Typy prymitywne reprezentują pojedynczą wartość i są proste oraz lekkie. Te są niemodyfikowalne (niezmienialne) i nie mają bezpośrednio metod obiektowych ani właściwości, ale mogą być tymczasowo konwertowane na obiekty opakowujące do wykonywania operacji.
string
i number
są przykładami typów prymitywnych. Natomiast obiekty opakowujące zaczynają się od wielkiej litery, takie jak String
i Number
.
Obiekty opakowujące
Aby manipulować typami prymitywnymi, JavaScript tymczasowo generuje obiekty opakowujące (Object
wrappers). Obiekty opakowujące zawierają metody i właściwości dla typów prymitywnych.
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
Number
to typ obiektu, który opakowuje prymitywnynumber
. Poprzez jawne utworzenie obiektuNumber
, możesz obsługiwać liczby jaknumber
, ale zazwyczaj zaleca się stosowanie prymitywnego typunumber
.
typeof numObject
to"object"
, aletypeof 42
to"number"
.
- Pamiętaj, że użycie operatora
new
do wygenerowania nowego obiektu opakowującego daje inny wynik niż wywołanieNumber
jako funkcji. Gdy wywołasz jako funkcję, zwracany jest prymitywnynumber
.
String
1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject); // object
4console.log(strObject.valueOf()); // Hello
- To typ obiektu, który opakowuje prymitywny
string
. Korzystając z obiektuString
, możesz uzyskać dostęp do właściwości i metod dla ciągów znaków, ale zazwyczaj stosuje się prymitywnystring
.
typeof strObject
to"object"
, aletypeof "Hello"
to"string"
.
- Podobnie jak w przypadku
Number
, wywołanieString
jako funkcji zwraca prymitywnystring
.
Boolean
1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject); // object
4console.log(boolObject.valueOf()); // true
- To typ obiektu, który opakowuje prymitywny
boolean
. Możesz również jawnie utworzyć obiektBoolean
, ale zazwyczaj używa się prymitywnego typuboolean
.
typeof boolObject
to"object"
, aletypeof true
to"boolean"
.
- Podobnie jak w przypadku
Number
, wywołanieBoolean
jako funkcji zwraca prymitywnyboolean
.
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()); //
- Możesz użyć
Object
, aby utworzyć obiekt opakowujący dlaSymbol
, ale zazwyczaj używa się bezpośrednio prymitywnego typuSymbol
.
Różnice między typami prymitywnymi a obiektami opakowującymi
- Typy prymitywne są lekkie i oszczędne w pamięci, ale nie mają bezpośrednich właściwości ani metod. Jednak w JavaScript, nawet w przypadku typów prymitywnych, tymczasowe obiekty opakowujące są automatycznie tworzone, gdy jest to konieczne do zapewnienia metod i właściwości.
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);
- Obiekty opakowujące to jawnie generowane obiekty, które mogą wpływać na pamięć i wydajność, dlatego zaleca się używanie typów prymitywnych.
Wniosek
- Typy Prymitywne: Lekkie typy, takie jak
number
,string
,boolean
,null
,undefined
isymbol
, które nie posiadają bezpośrednich metod. - Obiekty Opakowujące: Obiekty, takie jak
Number
,String
iBoolean
, które są tymczasowo konwertowane z typów prymitywnych.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.