2013-07-26 2 views
4

в этой части кода:Почему эта переменная не изменяется?

function change(s) 
{ 
    var number = s.replace(/\s+/g, ''); 
    for(var i = 0; i < number.length ; i++) 
    { 
    console.log(number[i]); //Line1 
    number[i] = '1'; 
    console.log(number[i]); //Line2 
    } 
} 

результаты Line1 и Line2 оба одинаковы (они возвращаются «2»)! Что здесь происходит?!

ответ

12

Строки в JavaScript неизменяемы. Вы не можете изменить их так, эта строка не делает ничего

number[i] = '1'; 
+2

Одд. Тогда вы ожидаете ошибки. – GolezTrol

+3

@GolezTrol [Строгий режим] (http://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/) сделает это за вас. См. Раздел «Ошибки для непременных». –

0

Я не могу сказать полностью, что вы хотите от этого, но я думаю, что это будет делать?

function change(s) 
{ 
    var number = s.replace(/\s+/g, ''); 
    var newstring = number; 
    for(var i = 0; i < number.length ; i++) 
    { 
     console.log(number[i]); //Line1 
     newstring[i] = '1'; 
     console.log(number[i]); //Line2 
    } 
    return(newstring); //or something to that effect 
} 

Теперь, это на самом деле своего рода бессмысленно код, я предполагаю, что вы собираетесь заменить «1» с чем-то немного более полезным.

1

Вы пытаетесь прочитать строку как массив. Char by char. Похоже, что JS не позволяет изменять значение любого индекса в этом случае. Если вы сделаете что-то вроде: number = "12345", значение в индексе: (I) изменится. Однако это не решит вашу цель. Чтобы сделать то, что вы пытаетесь сделать, вы должны разделить число, а затем повторить и изменить.

Пример:

function change(s) { 
    var number = s.replace(/\s+/g, ''); 
    var sArr = number.split(""); 
    for (var i = 0; i < number.length ; i++) { 
    console.log(sArr[i]); //Line1 (prints original) 
    sArr[i] = i; 
    console.log(sArr[i]); //Line2 (prints changed) 
    } 
    } 
Смежные вопросы