javascript - 不变是什么意思?

标签 javascript variables immutability

如果一个字符串是不可变的,这是否意味着...... (我们假设使用 JavaScript)

var str = 'foo';

alert(str.substr(1)); // oo

alert(str); // foo

这是否意味着,当对字符串调用方法时,它将返回修改后的字符串,但不会更改初始字符串?

如果字符串是可变的,这是否意味着第二个 alert() 也会返回 oo

最佳答案

这意味着一旦实例化该对象,就无法更改其属性。在您的第一个警报中,您没有更改 foo.您正在创建一个新字符串。这就是为什么在第二个警报中它将显示“foo”而不是 oo。

Does it mean, when calling methods on a string, it will return the modified string, but it won't change the initial string?

是的。字符串一旦创建就无法更改。现在,这并不意味着您不能将新的字符串对象分配给 str 变量。您只是无法更改 str 引用的当前对象。

If the string was mutable, does that mean the 2nd alert() would return oo as well?

从技术上讲,不能,因为 substring 方法返回一个新字符串。使对象可变,不会改变方法。使其可变意味着从技术上讲,您可以使子字符串更改原始字符串而不是创建新字符串。

关于javascript - 不变是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774758/

相关文章:

javascript - Jquery Clone() 内部 HTML 属性不改变

c - 将文件文本放入 C 中的变量中

php - 有没有办法以字节为单位获取 PHP 变量的大小?

自动映射器和不变性

java - 如何将不可变库与 Interface<T> 一起使用

javascript - 如何在发送到 AngularJS 中的服务器之前从 JSON 中删除多余的引号

javascript - 导入 JavaScript 模块是否会向服务器生成 'get' 请求?

objective-c - 为什么变量的行为如此奇怪?

python - 在 stackless python 中,通过 channel 发送的数据是不可变的吗?

javascript - 将特定深度的innerHTML提取到DOM树结构中