2013-08-30 76 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]",所以你應該首先創建一個與你正在複製的字符串長度相同的字符串,或者使用連接。