循环中调用String.charAt()返回undefined的问题求助
问题解决:
charAt调用返回undefined的原因及修复 哈哈,这个小问题太常见了!你这里踩了个很容易犯的语法坑——charAt是字符串的方法,不是数组属性,调用它必须用圆括号(),而不是方括号[]。
你写的alphabet.charAt[i],本质上是在尝试读取charAt这个函数对象的i属性,而不是调用它去获取字符串对应位置的字符,所以每次得到的都是undefined。循环里每次给images[undefined]赋值,最后一次循环的'd'会覆盖之前的结果,所以最终console.log(images)才会输出{undefined: "d"}。
直接把方括号改成圆括号就能解决问题,修正后的代码如下:
let images = {}; let alphabet = 'abcdefghijklmnopqrstuvwxyz'; let imageArray = ['a', 'b', 'c', 'd']; for (let i = 0; i < imageArray.length; i++){ let letter = alphabet.charAt(i); // 用圆括号调用charAt方法 images[letter] = imageArray[i]; } console.log(images); // 现在输出:{a: "a", b: "b", c: "c", d: "d"}
另外补充个小技巧:现在JS里也支持直接用方括号访问字符串的字符,比如alphabet[i],写法更简洁,效果和charAt(i)基本一致(唯一区别是当索引超出字符串长度时,alphabet[i]返回undefined,charAt(i)返回空字符串,不过你的循环范围是和imageArray长度匹配的,这里完全没问题)。
内容的提问来源于stack exchange,提问作者Kevin Johansson
相关产品推荐
相关产品推荐

