str [index + 1]在for循环中返回undefined

时间:2018-08-31 06:44:05

标签: javascript for-loop

为什么会这样?

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 :(得分:5)

问题在于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])
}

答案 1 :(得分:3)

原因是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
}

答案 2 :(得分:2)

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])
}

答案 3 :(得分:1)

请按以下方式使用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中。