不会。javascript 中的字符串是不可变(immutable)类型,所有内置的字符串方法都不会修改原字符串,而是返回一个新的字符串值。

slice() 和 substring() 在边界条件下表现有何不同
这两个方法都用于提取子串且不改变原字符串,但处理负数索引和参数顺序时行为不同。slice() 支持负数索引(从末尾计数),而 substring() 会将负数视为 0;此外 substring() 会自动交换较小的参数作为起始位置,而 slice() 若起始位置大于结束位置则返回空字符串。

const str = "Hello World"; console.log(str.slice(2, 5)); // "llo" console.log(str.substring(2, 5)); // "llo" // 负数索引差异 console.log(str.slice(-5)); // "World" console.log(str.substring(-5)); // "Hello World" (负数转为0) // 参数顺序差异 console.log(str.slice(5, 2)); // "" (空字符串) console.log(str.substring(5, 2)); // "llo" (自动交换为 2, 5)
replace() 只替换第一个匹配项吗
是的,默认情况下 replace() 只替换第一次出现的匹配内容。若要替换所有匹配项,需使用带有 g 标志的正则表达式,或者传入一个回调函数给 replaceAll()(ES2021 引入)。
立即学习“Java免费学习笔记(深入)”;

const text = "banana";
console.log(text.replace("a", "o")); // "bonana" (仅第一个)
console.log(text.replace(/a/g, "o")); // "bonono" (全部替换)
console.log(text.replaceAll("a", "o")); // "bonono"为什么 toUpperCase() 不修改原变量
因为字符串对象在内存中创建后其内容固定,toUpperCase() 只是基于原字符串生成一个新字符串并返回。原变量仍指向旧的字符串实例,除非显式重新赋值,否则原值保持不变。


















