str [index + 1] возвращает неопределенный цикл for - PullRequest
0 голосов
/ 31 августа 2018

Почему это происходит?

let str = 'sSAo'
console.log(str[0], str[3]) // all good

for (let i in str) {
    // why str[i+1] is undefined ???
    console.log(i, str[i], str[i+1])
}

Ответы [ 4 ]

0 голосов
/ 31 августа 2018

i на самом деле строка, поэтому + объединит 1 со своим значением.

Вы можете добавить его к +, чтобы преобразовать переменную в число:

let str = 'sSAo'
console.log(str[0], str[3]) // all good

for (let i in str) {
    // why str[i+1] is undefined ???
    console.log(i + 1, +i + 1, str[i], str[+i + 1])
}
0 голосов
/ 31 августа 2018

Пожалуйста, используйте parseInt(), как показано ниже:

let str = 'sSAo'
console.log(str[0], str[3]) // all good

for (let i in str) {
    // why str[i+1] is undefined ???
    console.log(i, str[i], str[parseInt(i)+1])
}

В этом случае будет отображаться только неопределенное время последнего цикла. Я надеюсь, что это по той причине, что это не в str.

0 голосов
/ 31 августа 2018

Проблема в том, что цикл for..in повторяется по именам свойств объекта. Но имена свойств всегда строки , а не числа. Следовательно, например, на первой итерации:

str[i+1]

оценивается как

str['0'+1]

что составляет

str['01']

Вместо этого сначала приведите i к Number:

let str = 'abcd'

for (let i in str) {
    console.log(i, str[i], str[Number(i)+1])
}
0 голосов
/ 31 августа 2018

Причина в том, что i+1 не будет прибавлять значение, как вы ожидали, значение будет 01,11,21,31, это причина, вам нужно использовать parseInt(), чтобы сделать это,

let str = 'sSAo'
console.log(str[0], str[3]) // all good

for (let i in str) {
    // why str[i+1] is undefined ???
    console.log(i, str[i], str[parseInt(i)+1]);//but the last one will still be undefined
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...