gpt4 book ai didi

javascript - JS for 和 for...in 带有字符串

转载 作者:行者123 更新时间:2023-11-28 13:11:49 25 4
gpt4 key购买 nike

我正在制作一个循环,一次从字符串中获取一个字符,并将其右侧和左侧的部分作为字符串切片。

当使用 for .. in 时,第二次迭代中的右侧切片在应该给出 'c' 时给出了 '',尽管 i > 在所有迭代中都是正确的

    var str = 'abc';
for (var i in str)
console.log(i + '/' + str[i] + '/' + str.slice(0, i) + '/' + str.slice(i + 1));
/* output
0/a//bc
1/b/a/
2/c/ab/
*/

// While it works normally with for

for (var i = 0; i < str.length; ++i)
console.log(i + '/' + str[i] + '/' + str.slice(0, i) + '/' + str.slice(i + 1));
/* output
0/a//bc
1/b/a/c
2/c/ab/
*/

为什么会发生这种情况?如果 for...in 与字符串一起使用会出现什么问题?

最佳答案

for ... in循环中,i的值将是字符串,而不是数字。属性名称始终为字符串*

因此,当 i“1” 时,i + 1 表示 11.slice() 代码会将其视为数字,并且由于字符串中只有 3 个字符,因此结果是一个空字符串。

一般来说,for ... in 不是一个好主意,除非您真的知道您想要做的是迭代对象的所有可枚举属性并且它的原型(prototype)链。当迭代数组(或类似数组的对象)的编号属性时,对一系列数值进行老式的 for 循环要安全得多,并保证您将按预期顺序进行迭代。 (for ... in 循环不保证迭代顺序。)还有 .forEach() 和其他 Array.prototype 方法用于迭代。

* 属性名称也可以是现代 JavaScript 中的 Symbol 实例,但这显然不是这个问题的问题。

关于javascript - JS for 和 for...in 带有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41830444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com