2014-09-17 3 views
1

В настоящее время я изучаю javascript самостоятельно и хотел бы узнать, сможет ли кто-нибудь помочь мне прояснить эти вопросы, которые у меня есть. Я в настоящее время обучение петли и наткнулся на этот код в книге:Javascript для цикла?

var scores = [34, 45, 66, 1023, 1030, 'Done!']; 
 
var arrayLength = scores.length; 
 
var roundNumber = 0; 
 
var msg = ''; 
 
var i; 
 

 
for (i = 0; i < arrayLength; i++) { 
 

 
    roundNumber = (i + 1); 
 

 
    msg += 'Round ' + roundNumber + ': '; 
 

 
    msg += scores[i] + '<br />'; 
 

 
} 
 

 
document.getElementById('answer').innerHTML = msg;
<div id="answer"></div>

Теперь, когда петли через массив и возвращает все числа в массиве. Но если бы я изменился:

var msg = ''; to var msg; 

msg = 'Round ' + roundNumber + ': '; 

Он возвращает только последний элемент в массиве. Почему это влияет на это? Как сделать переменную msg равной нулю?

+4

Вы также сменили оператор с '+ =' на '=' – Rooster

+0

Вы удалили знак '+' перед знаком '='. Поэтому вы создаете новую строку каждый раз вместо того, чтобы добавлять в нее больше контента. –

+1

@ RomainBraun - строго, новая строка создается каждый раз независимо от '=' или '+ ='. ;-) – RobG

ответ

2

Есть две вещи, здесь вы должны понять:

  • =
    Это оператор присваивания. Операция var x = 'something' означает, что любое значение внутри x будет забыто и заменено новым значением 'something'.

  • + =
    Это бинарный оператор. Он увеличивает значение переменной, поэтому x += 'something' добавит значение 'something' к любому значению, которое уже было внутри переменной x. Это то же самое, как x = x + 'something'

Таким образом, не инициализирует значение для переменной, просто сделать это, не имея ничего, чтобы добавить:

var msg; 

msg += 'Round' //This would give you 'undefinedRound' 

Теперь, в вашем случае, вы удалили знак +, поэтому вы использовали простой оператор назначения =. Каждый раз, когда петли for, он сбрасывает значение переменной.

2

внесение следующей декларации

var msg; 

делает msg == undefined изначально, но проблема в том, что вторая строке изменен:

msg = 'Round ' + roundNumber + ': '; 

Это приводит к тзду равный только то, что значение справа стороне присвоения значений. Используя +=, а не только =, вы непрерывно конкатенируете предыдущие значения msg.

1
msg += 'Round ' + roundNumber + ': '; //update the msg by adding previus value plus current value 
msg = 'Round ' + roundNumber + ': '; //update the msg by adding only the current value. Just like assigning new value in the msg variable. 
0

Проблема заключается в следующей строке:

msg = 'Round ' + roundNumber + ': '; 

Линия должна на самом деле читать:

msg += 'Round ' + roundNumber + ': '; 
Смежные вопросы