據我所知,物體可以是任意大小,所以你永遠不知道物體會有多大。所以它被實作為參考型別。與您事先知道大小的任何原始型別不同。這就是本文所說的。但是字串......來自另一篇文章:
String :一組 16 位無符號整數值的“元素”。因為字串不是一個固定值,分配了字串的變數不包含字串,而是對它的參考。
但是原始型別的字串如何呢?
uj5u.com熱心網友回復:
你讀的那本書很奇怪。
原始型別在記憶體中具有固定大小。例如,一個數字占用 8 個位元組的記憶體,一個布林值可以只用一位來表示。數字型別是最大的原始型別。如果每個 JavaScript 變數保留 8 個位元組的記憶體,則該變數可以直接保存任何原始值。
然而,參考型別是另一回事。例如,物件可以是任意長度——它們沒有固定的大小。陣列也是如此:陣列可以有任意數量的元素。同樣,一個函式可以包含任意數量的 JavaScript 代碼。由于這些型別沒有固定的大小,因此它們的值不能直接存盤在與每個變數關聯的八位元組記憶體中。相反,該變數存盤對該值的參考。通常,此參考是某種形式的指標或記憶體地址。它不是資料值本身,而是告訴變數在哪里尋找值。
然后作者繼續解釋這如何導致不同的行為,好像這是記憶體布局的影響。但他們搞錯了。區別應該是:
- 原始型別具有普通的、不可變的值,在傳遞時將按值復制。
- 參考型別 - 與“物件型別”同義 - 具有可變物件作為值,它們具有標識(在實體化物件時創建)并且可以具有任意可變屬性。變數從不保存“物件”本身,而是對它的參考,當你傳遞它時,正是這個參考被復制了。
這(以及“陣列和函式都是物件”)是 JavaScript 價值模型的要點。如何實作并不重要——事實上它因引擎而異。
現在,當您問“為什么字串是原語? ”時,答案是“因為字串是不可變的值并且沒有屬性”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460662.html
標籤:javascript
上一篇:未捕獲的型別錯誤:無法讀取未定義的屬性(讀取“公司名稱”)JS物件
下一篇:如何使用.map從陣列中獲取刺痛
