Obiekty opakowujące w JavaScript

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 prymitywny number. Poprzez jawne utworzenie obiektu Number, możesz obsługiwać liczby jak number, ale zazwyczaj zaleca się stosowanie prymitywnego typu number.

typeof numObject to "object", ale typeof 42 to "number".

  • Pamiętaj, że użycie operatora new do wygenerowania nowego obiektu opakowującego daje inny wynik niż wywołanie Number jako funkcji. Gdy wywołasz jako funkcję, zwracany jest prymitywny number.

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 obiektu String, możesz uzyskać dostęp do właściwości i metod dla ciągów znaków, ale zazwyczaj stosuje się prymitywny string.

typeof strObject to "object", ale typeof "Hello" to "string".

  • Podobnie jak w przypadku Number, wywołanie String jako funkcji zwraca prymitywny string.

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ć obiekt Boolean, ale zazwyczaj używa się prymitywnego typu boolean.

typeof boolObject to "object", ale typeof true to "boolean".

  • Podobnie jak w przypadku Number, wywołanie Boolean jako funkcji zwraca prymitywny boolean.

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 dla Symbol, ale zazwyczaj używa się bezpośrednio prymitywnego typu Symbol.

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 i symbol, które nie posiadają bezpośrednich metod.
  • Obiekty Opakowujące: Obiekty, takie jak Number, String i Boolean, 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.

YouTube Video