我正在尝试将非空字符串中的每个字符分配给空字符串(制作副本)。这是我的代码:
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);
我认为可以动态增长非空字符串(希望我使用正确的术语)。任何帮助表示赞赏!
答案 0 :(得分:0)
未定义空字符串中的"".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);
}
答案 1 :(得分:0)
charAt(x)
会返回一个字符串,其中包含字符串x
的{{1}}位置的字符,但不会将链接返回到该位置,因此,它不等于C的this
表示法,它返回指向字符所在字节的链接。
因此,[]
分配无效,charAt(x)=
也不是。
无论如何,无论"a"="b"
是什么,你都不能"".charAt(x)
,因为字符串是空的。
无论如何,由于第一段中描述的原因,你甚至不能x
。
因此,更改字符串中某些字符的唯一方法是"a".charAt(0)="b"
,这在大多数浏览器中都有效。但是你仍然不能str[x]
,所以你应该首先创建一个与你要复制的字符串长度相同的字符串,或者使用连接。
答案 2 :(得分:-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)
。
e.g:
第一次迭代:
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
。