簡體   English   中英

javascript中的對象是可變的嗎? 如果是,那么為什么字符串的對象是不可變的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM