当前位置:  开发笔记 > 编程语言 > 正文

JS for和for ... in with with string

如何解决《JSfor和forinwithwithstring》经验,为你挑选了1个好方法。

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

当使用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/
    */

为什么会这样?如果...用于字符串时有什么问题?



1> Pointy..:

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

因此,i + 1意味着11i"1".该.slice()代码将处理,作为一个数,因为只有3字符串中的字符的结果是一个空字符串.

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

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

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有