2013-08-30 114 views
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); 

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

+0

*只有*变量和属性(或更严格地说,ReferenceSpecificationTypes)可能出现在“=”的“左侧”。函数可以*从不*出现在'='的左边。无论如何,字符串是不可变的,所以创建一个基于旧的字符串。你可能想要'str + str'在这里。 – user2246674

回答

-1

这是可能的。这是正确的方式去:

x = "example"; 
y = ""; 

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

你的做法是不正确的,因为的charAt(I)方法在我返回该位置的字符的(只读)值。

相反,赋值运算符,如=,存储在运算=的右边的值到在左侧的变量。

在这种情况下,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" 

等等...

在每一步中,char在字符串x的位置i被附加到字符串y并且结尾x === y

+0

你应该解释为什么这是有效的。 – progrenhard

+0

这是否会创建一个新的字符串对象与每个+ =因为字符串是不可变的?那不会是OP想要的“动态增长的字符串” –

+0

为什么不只是'y = x;'如果这就是你正在做的事情? – progrenhard

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

charAt(x)返回包含在字符串this的位置x字符的字符串,但不返回链路到该位置,从而,不等于C的[]符号,它返回一个链接字符所在的字节。 因此,charAt(x)=赋值无效,"a"="b"也不是。

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

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

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