JavaScript 中的包裝物件

JavaScript 中的包裝物件

本文說明了 JavaScript 中的包裝物件。

YouTube Video

封裝對象

JavaScript 有 基本型別 和處理這些型別的對象(封裝對象)。

基本型別

基本類型表示一個單一值,並且簡單且輕量化。這些是不可變不可更改)的,並且不直接具有對象的方法或屬性,但它們可以臨時轉換為包裝對象進行操作。

stringnumber 是基本類型的例子。另一方面,包裝對象以大寫字母開頭,例如 StringNumber

包裝物件

為了操作原始類型,JavaScript 會臨時生成包裝對象(Object 包裝)。包裝對象包含原始類型的屬性和方法。

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 是一種包裝原始類型 number 的對象類型。通過明確創建 Number 對象,您可以像處理 number 一樣處理數字,但通常建議使用原始類型 number

typeof numObject"object",但 typeof 42"number"

  • 請注意,使用 new 運算符生成新的包裝對象與以函數方式調用 Number 所得的結果不同。當作為函數調用時,會返回基本類型的 number

String

1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject);    // object
4console.log(strObject.valueOf()); // Hello
  • 它是一種包裝原始類型 string 的對象類型。通過使用 String 對象,您可以訪問字符串的屬性和方法,但通常使用原始類型 string

typeof strObject"object",但 typeof "Hello""string"

  • Number 一樣,以函數方式調用 String 會返回一個原始類型的 string

Boolean

1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject);    // object
4console.log(boolObject.valueOf()); // true
  • 它是一種包裝原始類型 boolean 的對象類型。您也可以明確創建 Boolean 對象,但通常使用原始類型 boolean

typeof boolObject"object",但 typeof true"boolean"

  • Number 類似,以函數方式調用 Boolean 會返回一個原始類型的 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()); //
  • 您可以使用 ObjectSymbol 創建一個包裝對象,但通常您會直接使用 Symbol 原始類型。

原始類型與包裝對象的區別

  • 原始類型 輕量且內存效率高,但它們沒有直接的屬性或方法。然而,在 JavaScript 中,即使使用原始類型,也會在需要時自動創建臨時的包裝對象以提供方法和屬性。
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);
  • 包裝對象 是明確生成的對象,會影響內存和性能,因此通常建議使用原始類型。

結論

  • 原始類型:例如 numberstringbooleannullundefinedsymbol 等輕量型類型,這些類型沒有直接的方法。
  • 包裝對象:例如 NumberStringBoolean 等物件,這些是從原始類型暫時轉換而來的。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video