首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript字符串不变性

JavaScript字符串不变性
EN

Stack Overflow用户
提问于 2018-06-07 08:04:04
回答 1查看 1.1K关注 0票数 1

我最近正在处理一个字符串问题,偶然发现了一件事,一开始我觉得很奇怪,但在看了一眼之后,我意识到这可能与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']);

这不是因为字符串是不可变的,所以不能应用转换吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 08:28:43

toLowerCase()不会修改调用它的字符串。因为字符串是不可变的,所以它不能这样做。但即使它们是可变的,它也不是定义函数要做的事情。它返回一个新字符串,其中包含原始字符串的小写版本。

它类似于数组的slice()方法。数组是可变的,但是slice()返回一个包含指定子数组的新数组,它不会修改原始数组(这就是splice()所做的)。

因此,如果您想对这个新字符串执行任何操作,则需要将其赋值到某个位置,将其作为参数传递给函数,或者对结果调用其他方法。

如果不需要lower变量,可以这样写:

console.log(`Row is ${row[i].toLowerCase()}`);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50731266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档