首頁  >  文章  >  web前端  >  JavaScript 基元真的是物件嗎?

JavaScript 基元真的是物件嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-15 00:08:02269瀏覽

Are JavaScript Primitives Truly Objects?

JavaScript 物件的有趣本質

在程式設計的深處,JavaScript 的世界呈現出意想不到的轉折:並非一切都是物件。雖然許多介紹性文本暗示「幾乎所有東西」都屬於這種分類,但仔細檢查會發現不同的事實。

物件的核心是透過方法和屬性封裝功能。例如,數組就適合這個模型及其固有的鍵值對。然而,當涉及到「字串」、「數字」和「函數」時,界限就變得模糊了。

這些實體可能看起來類似於函數,對輸入執行轉換並產生輸出,而無需明顯存取屬性或方法。在這種情況下,點表示法仍然明顯缺失。

包裝難題

揭開謎團,我們發現了一個微妙的區別:這些原語,正如它們所知,缺乏物體的真實本質。相反,它們被包裹在物件服裝中,即字串、數字和布林值。這些包裝器擁有方法和屬性,賦予物件行為的錯覺。

例如,考慮以下程式碼:

var s = "foo";
var sub = s.substring(1, 2); // sub becomes "o"

在幕後,JavaScript 執行一系列隱藏步驟:

  1. 為s 建立一個String 包裝對象,有效地應用新的String。
  2. 使用指定參數在包裝物件上執行 substring() 方法。
  3. 丟棄字串包裝物件。
  4. 傳回步驟 2 中產生的字串(原始)。

屬性的幻覺

雖然它似乎基元可以分配屬性,這種嘗試被證明是徒勞的,如以下示例所示:

var s = "foo";
s.bar = "cheese";
alert(s.bar); // undefined

發生這種情況是因為該屬性是在短暫的String 包裝物件上定義的,該物件會立即被丟棄,呈現

函數:偽裝的物件

與基元不同,函數是繼承自Object 的成熟物件。這意味著它們擁有物件的所有功能,包括擁有自己的屬性的能力。看看這個例子:

function foo() {}
foo.bar = "tea";
alert(foo.bar); // tea

結論

在 JavaScript 中,並不是所有東西都披著物件的外衣。由物件包裝器偽裝的原語創造了物件行為的錯覺。只有透過更深入地理解 JavaScript 的複雜性,其物件的真實本質才會變得顯而易見。

以上是JavaScript 基元真的是物件嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn