[英]is object mutable in javascript? If yes, why the object of string is immutable then?
在javascript 中,只有對象和數組是可變的,其余的是不可變的原始類型。 但是如果我們創建一個字符串對象,那么它就不能被改變。 這是為什么?
var a = new String("abc")
a.toUpperCase();
console.log(a) /*wont print "ABC" and prints an object with String:abc. Concludes
that string object is immutable.*/
一般來說,是的,對象是可變的。
“字符串對象” - 用new String
創建 - 不可變的原因是字符串對象導致具有內部StringData
屬性的對象:
將 S.[[StringData]] 設置為值。
StringData
是當字符串對象被強制回原語時檢索到的內容。
如果解釋器提供了一種方法來更改此StringData
內部插槽 - 那么這些類型的對象實際上是可變的。 (同樣, Set.add
改變了一個 Set 的內部槽,同樣的機制也存在於 JS 中的許多其他對象——一個暴露的方法改變了內部槽中的值。)
但
a.toUpperCase();
單獨不會做任何事情 - toUpperCase
返回一個新字符串。 不存在可以改變字符串對象的StringData
內部槽的方法(在標准實現中) - 您所能做的就是使用不同的StringData
創建一個新的字符串對象。
您也可以強烈考慮根本不使用字符串對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.