JavaScript 中的包裝物件
本文說明了 JavaScript 中的包裝物件。
YouTube Video
封裝對象
JavaScript 有 基本型別 和處理這些型別的對象(封裝對象)。
基本型別
基本類型表示一個單一值,並且簡單且輕量化。這些是不可變(不可更改)的,並且不直接具有對象的方法或屬性,但它們可以臨時轉換為包裝對象進行操作。
string 和 number 是基本類型的例子。另一方面,包裝對象以大寫字母開頭,例如 String 和 Number。
包裝物件
為了操作原始類型,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()); //
- 您可以使用
Object為Symbol創建一個包裝對象,但通常您會直接使用Symbol原始類型。
原始類型與包裝對象的區別
- 原始類型 輕量且內存效率高,但它們沒有直接的屬性或方法。然而,在 JavaScript 中,即使使用原始類型,也會在需要時自動創建臨時的包裝對象以提供方法和屬性。
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);- 包裝對象 是明確生成的對象,會影響內存和性能,因此通常建議使用原始類型。
結論
- 原始類型:例如
number、string、boolean、null、undefined和symbol等輕量型類型,這些類型沒有直接的方法。 - 包裝對象:例如
Number、String和Boolean等物件,這些是從原始類型暫時轉換而來的。
您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。