关于for(let i in some_string)和for(let i = 0; i < some_string.length; i ++)的一个疑问

58 阅读1分钟

说一下题目要求: 提取出字符串s中每个{}内的内容,加入到totalKeys数组中

虽然我们可以

const matches = s.match(regex).map((match) => match.slice(1, -1).trim());

一行代码解决,但不用正则,而是采用最暴力的指针idx记录+遍历

关键就在这个遍历,采用for(let i = 0; i < s.length; i ++) 是没毛病的:

截屏2024-05-09 21.18.55.png

输出结果:

截屏2024-05-09 21.19.07.png

但是不知为啥,用for(let i in s) 这种遍历方式就出问题了:

截屏2024-05-09 21.20.01.png

输出结果:

截屏2024-05-09 21.20.08.png

我知道 for i循环 会遍历所有可枚举属性,包括字符串的原型属性等,但是我for (let i in s) { console.log(i) }打印出来的确是从0到s.length-1啊,那为什么向 totalKeys 数组 push s.slice(idx+1, i).trim() 会push进一个空字符串呢????

希望有大佬可以给个解答~~~🙏