2013-11-26 4 views
2

Почему я должен разобрать i в число и в переменную, чтобы я мог получить str.charAt(i+1), если str.charAt(i-1) работает нормально?Почему `i` становится строкой в ​​моем цикле?

Это для coderbyte «простых символов» и это заняло у меня два часа, чтобы выяснить, что i иногда строка, а иногда и несколько

function SimpleSymbols(str) { 
    // code goes here 
    var letters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    var letterArray=letters.split(''); 
    var strArray=str.split(''); 
    var truth=false; 
    for (var i in strArray){ 
     var e=parseFloat(i)+1; 
     if (letterArray.indexOf(strArray[i]) > -1){   
      if ((str.charAt(i-1)==='+')&&(str.charAt(e)==='+')){ 
       truth = true; 
      } 
     } 
    } 



    return truth; 

} 
// keep this function call here 
// to see how to enter arguments in JavaScript scroll down 
SimpleSymbols(readline());   
+1

Потому что 'i' является персонажем. 'if (letterArray.indexOf (i)> -1) {' –

+0

, но почему работает str.charAt (i-1) и str.charAt (i + 1). – user3000326

+1

совпадение? это не вопрос, что я персонаж из-за цикла for, который вы делаете. –

ответ

7

+ перегружается для строк - это также оператор конкатенации , Так, например

'5' + 2 // '52' 

но - не перегружена таким же образом; он преобразует строки в число:

'5' - 2 // 3 
+0

спасибо. что объясняет это очень четко – user3000326

0

Чтобы ответить на актуальный вопрос:

Почему i стала строкой в ​​моем цикле?

Потому что for...in выполняет итерации над именами объектов объекта, и они всегда являются строками. См. MDN documentation для получения дополнительной информации. Вы также найдете большую предупреждающую коробку, которая объясняет, почему бы не использовать for...in с массивами.

Смежные вопросы