0

我正在尝试将非空字符串中的每个字符分配给空字符串(制作副本)。这是我的代码:

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);

我认为可以动态地增长一个非空字符串(希望我使用的是正确的术语)。任何帮助表示赞赏!

4

3 回答 3

0

The "".charAt(0) in an empty string is not defined. Indeed, "a".charAt(0) is "a".

Why don't you concatenate?

x = "example";
y = "";

//Simplest way:
y += x;

//With characters:
for (var i = 0; i < x.length; i++) {
    y += x.charAt(i);
}
于 2013-08-30T20:23:36.307 回答
0

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

"".charAt(x)无论如何,不​​管是什么你都做不到x,因为字符串是空的。

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

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

于 2013-08-30T20:42:07.117 回答
-1

有可能的。这是正确的方法:

x = "example";  
y = "";

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

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

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

在这种情况下y += x.charAt(i)等于y = y + x.charAt(i)

例如:

第一次迭代:

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 处的char被附加到字符串 y 和末尾x === y

于 2013-08-30T20:20:28.570 回答