动态添加到空字符串

Adding dynamically to an empty string

本文关键字:字符串 添加 动态      更新时间:2023-09-26

我正试图将非空字符串中的每个字符分配给一个空字符串(进行复制)。这是我的代码:

x = "example";
y = "";
for (var i = 0; i < x.length; i++) {
    y.charAt(i) = x.charAt(i);
}
alert(y);

然而,我在控制台中得到以下错误:

ReferenceError: invalid assignment left-hand side
y.charAt(i) = x.charAt(i);

我认为可以动态地增长一个非空字符串(希望我使用的是正确的术语)。感谢您的帮助!

空字符串中的"".charAt(0)未定义。事实上,"a".charAt(0)是"a"。

为什么不连接?

x = "example";
y = "";
//Simplest way:
y += x;
//With characters:
for (var i = 0; i < x.length; i++) {
    y += x.charAt(i);
}

charAt(x)在字符串thisx位置返回一个包含字符的字符串,但不返回到该位置的链接,因此,它不等于C的[]表示法,后者返回到字符所在字节的链接。因此,charAt(x)=赋值无效,"a"="b"赋值也无效。

无论如何,无论什么是x,都不能执行"".charAt(x),因为字符串是空的。

无论如何,你甚至不能做"a".charAt(0)="b",因为第一段中描述的原因。

因此,更改字符串中某个字符的唯一方法是str[x],它适用于大多数浏览器。但是您仍然不能""[0]",所以您应该首先创建一个与要复制的字符串长度相同的字符串,或者使用串联。

这是可能的。这是正确的做法:

x = "example";  
y = "";
for (var i = 0; i < x.length; i++) {
    y += x.charAt(i);
}

您的方法不正确,因为charAt(i)方法返回位置i处的字符的(只读)值。

相反,赋值运算符(如=)将运算=右侧的值存储到左侧的变量中。

在这种情况下,CCD_ 16等于CCD_ 17。

例如:

第一次迭代:

x = "example";
y = ""
i = 0
x.charAt(i) == x.charAt(0) == "e"
y += x.charAt(i) -> y = y + x.charAt(i) -> y = y + x.charAt(0) -> y = y + "e" -> y = "" + "e" = e

第二次迭代:

x = "example";
y = "e"
i = 1
x.charAt(i) == x.charAt(1) == "x"
y += x.charAt(i) -> y = y + x.charAt(i) -> y = y + x.charAt(1) -> y = y + "x" -> y = "e" + "x"

等等…

在每个步骤中,字符串x的位置i处的字符被附加到字符串y,并在末尾x === y