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
Numberto typ obiektu, który opakowuje prymitywnynumber. Poprzez jawne utworzenie obiektuNumber, możesz obsługiwać liczby jaknumber, ale zazwyczaj zaleca się stosowanie prymitywnego typunumber.
typeof numObjectto"object", aletypeof 42to"number".
- Pamiętaj, że użycie operatora
newdo wygenerowania nowego obiektu opakowującego daje inny wynik niż wywołanieNumberjako 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 strObjectto"object", aletypeof "Hello"to"string".
- Podobnie jak w przypadku
Number, wywołanieStringjako 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 boolObjectto"object", aletypeof trueto"boolean".
- Podobnie jak w przypadku
Number, wywołanieBooleanjako 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,undefinedisymbol, które nie posiadają bezpośrednich metod. - Obiekty Opakowujące: Obiekty, takie jak
Number,StringiBoolean, 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.