为什么有些 JavaScript 函数需要创建一个新变量,而其他函数则不需要?

Why do some JavaScript functions require a new variable to be created, but others do not?

为什么像 toLowerCase() 这样的一些函数在字符串上使用时需要分配一个新变量,而像 sort()reverse()pop() 这样的其他函数却需要分配一个新变量在数组上使用时不是?

例如下面的代码是错误的:

var str = "Hello World";
str.toLowerCase();

但下面的代码是正确的:

var arr = ["This","is","my","array"]
arr.sort();

我读到在字符串上使用 toLowerCase() 时,我必须将代码写成这样:

str = str.toLowerCase();

因为字符串在 JavaScript 中是不可变的,这意味着您无法更改它们。每次您尝试修改字符串时,实际上都是在创建一个包含更改的新字符串。

所以当你做 str.toLowerCase(); 时,它不是修改 str,它实际上是用小写字母制作它的副本。

数组不同,因为它是对数组项的引用列表。您可以将每个项目与其他项目分开更改 arr[5]=11。您还可以添加或删除项目。 sort()reverse() 函数重新排列数组中的项目。

顺便说一下,这个概念并不是 JavaScript 独有的。许多其他现代语言也使字符串不可变(可能是所有将 String 作为内置类型的语言)。