【发布时间】:2020-08-14 08:28:53
【问题描述】:
此代码不起作用
var x ='hello';
x[2] ='a';
为什么它不起作用? 我没有使用 replace() 函数
【问题讨论】:
标签: javascript string
此代码不起作用
var x ='hello';
x[2] ='a';
为什么它不起作用? 我没有使用 replace() 函数
【问题讨论】:
标签: javascript string
由于使用原始 string 值的值将 string 值提升为 String 对象包装器的传统行为,它不起作用。
例如
"xyz".charAt(0)
至少在概念上被评估为
(new String("xyz")).charAt(0)
因为charAt 是String 对象的原型方法,可以通过这种方式应用于原始字符串值。
不利的一面是提升的 String 对象永远不会存储在任何地方,即使在 JavaScript 中修改也会立即丢弃。这就是发布的代码中发生的事情:
var x ='hello';
x[2] ='a';
被视为
new String(x)[2] = 'a'
接着丢弃 String 对象,顺便提一下,该对象有一个名为 2 的属性,其值为 'a'。
对此的一般解决方案是在 strict mode 中运行 JavaScript,这样任何将属性分配给已提升为对象包装器的原始值的尝试都会产生错误:
"use strict"
var x ='hello';
x[2] ='a';
【讨论】:
在 javascript 中,字符串是不可变的,您不能使用 index.html 更改字符串。 trim、slice 等字符串操作方法返回新字符串。
【讨论】: