为什么有些JavaScript函数需要创建一个新变量,但其他函数却没有?

时间:2018-02-13 22:17:47

标签: javascript sorting in-place

为什么在字符串上使用某些函数(如toLowerCase())时需要为其分配一个新变量,但sort()reverse()pop()等其他函数则不需要用在阵列上?

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

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

但是下面的代码是正确的:

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

我正在阅读在字符串上使用toLowerCase()时,我必须使用以下代码编写代码:

str = str.toLowerCase();

1 个答案:

答案 0 :(得分:4)

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

因此,当你执行str.toLowerCase();时,它不会修改str,它实际上是用字母的小写字母复制它。

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

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