Javascript str[index+;1]返回for循环中未定义的值
为什么会发生这种情况Javascript str[index+;1]返回for循环中未定义的值,javascript,for-loop,Javascript,For Loop,为什么会发生这种情况 let str='sSAo' console.log(str[0],str[3])//一切正常 为了(让我进来){ //为什么str[i+1]没有定义??? log(i,str[i],str[i+1]) }原因是i+1不会像您预期的那样加上该值,该值将是01,11,21,31,这就是原因,您需要使用parseInt()来执行此操作 let str='sSAo' console.log(str[0],str[3])//一切正常 为了(让我进来){ //为什么str[i+1
let str='sSAo'
console.log(str[0],str[3])//一切正常
为了(让我进来){
//为什么str[i+1]没有定义???
log(i,str[i],str[i+1])
}
原因是i+1
不会像您预期的那样加上该值,该值将是01,11,21,31
,这就是原因,您需要使用parseInt()
来执行此操作
let str='sSAo'
console.log(str[0],str[3])//一切正常
为了(让我进来){
//为什么str[i+1]没有定义???
log(i,str[i],str[parseInt(i)+1]);//但是最后一个仍然是未定义的
}
请使用parseInt()
如下:
let str='sSAo'
console.log(str[0],str[3])//一切正常
为了(让我进来){
//为什么str[i+1]没有定义???
log(i,str[i],str[parseInt(i)+1])
}
问题在于,for..in
循环迭代对象的属性名称。但是属性名总是字符串,而不是数字。因此,例如,在第一次迭代中:
str[i+1]
评估为
str['0'+1]
那是
str['01']
相反,先将i
转换为Number
:
let str='abcd'
为了(让我进来){
console.log(i,str[i],str[Number(i)+1])
}
i
实际上是一个字符串,因此+
将把1连接到其值
您可以使用+
将变量转换为数字:
let str='sSAo'
console.log(str[0],str[3])//一切正常
为了(让我进来){
//为什么str[i+1]没有定义???
log(i+1,+i+1,str[i],str[+i+1])
}
你是唯一一个解释为什么i
是一个字符串的人,而不是仅仅展示如何修复它。这不是我说的吗?