繁体   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