我最近正在处理一个字符串问题,偶然发现了一件事,一开始我觉得很奇怪,但在看了一眼之后,我意识到这可能与JavaScript字符串的不变性有关。
我想问一下,看看社区是怎么想的。
下面是一些代码片段:
var keys = function(words) {
for (var i = 0; i < words.length; i++) {
// With lower, ['hello', 'alaska', 'dad', 'peace']
var lower = words[i].toLowerCase();
console.log(`Word is ${lower}`);
}
}
keys(['Hello', 'Alaska', 'Dad', 'Peace']);
lower
行吗?因为JS字符串是不可变的,所以我们必须先复制一个字符串,以便在其他地方使用它进行应用的转换(使字符串小写)?
var keys = function(words) {
for (var i = 0; i < words.length; i++) {
// Without lower, ['Hello', 'Alaska', 'Dad', 'Peace']
words[i].toLowerCase();
console.log(`Word is ${words[i]}`);
}
}
keys(['Hello', 'Alaska', 'Dad', 'Peace']);
这不是因为字符串是不可变的,所以不能应用转换吗?
谢谢
发布于 2018-06-07 08:28:43
toLowerCase()
不会修改调用它的字符串。因为字符串是不可变的,所以它不能这样做。但即使它们是可变的,它也不是定义函数要做的事情。它返回一个新字符串,其中包含原始字符串的小写版本。
它类似于数组的slice()
方法。数组是可变的,但是slice()
返回一个包含指定子数组的新数组,它不会修改原始数组(这就是splice()
所做的)。
因此,如果您想对这个新字符串执行任何操作,则需要将其赋值到某个位置,将其作为参数传递给函数,或者对结果调用其他方法。
如果不需要lower
变量,可以这样写:
console.log(`Row is ${row[i].toLowerCase()}`);
https://stackoverflow.com/questions/50731266
复制相似问题