为什么有些 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
作为内置类型的语言)。
为什么像 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
作为内置类型的语言)。