【问题标题】:Why does `i` become a string in my loop? [duplicate]为什么 `i` 在我的循环中变成了一个字符串? [复制]
【发布时间】:2013-11-26 23:19:41
【问题描述】:

为什么我必须将i 解析为一个数字和一个变量,这样我才能让str.charAt(i+1) 工作,而str.charAt(i-1) 工作得很好?

这是针对 coderbyte“简单符号”的,我花了两个小时才弄清楚 i 有时是字符串,有时是数字

function SimpleSymbols(str) { 
    // code goes here
    var letters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var letterArray=letters.split('');
    var strArray=str.split('');
    var truth=false;
    for (var i in strArray){
        var e=parseFloat(i)+1;
        if (letterArray.indexOf(strArray[i]) > -1){        
            if ((str.charAt(i-1)==='+')&&(str.charAt(e)==='+')){
                truth = true;
            }
        } 
    }



    return truth; 

}
// keep this function call here 
// to see how to enter arguments in JavaScript scroll down
SimpleSymbols(readline());           

【问题讨论】:

  • 因为i 是一个字符。 if (letterArray.indexOf(i) > -1){
  • 但是为什么 str.charAt(i-1) 有效而 str.charAt(i+1) 无效。
  • 巧合?毫无疑问,由于您正在执行 for in 循环,所以 i 是一个角色。
  • 不要使用 for ... in 进行 JavaScript 数组遍历。
  • “我假设 i 是一个数字,因为 i 是数组的索引” 由于您使用的是 for...in,因此您正在迭代 属性名称 的对象,它总是字符串。另请注意,如果您引用变量 i 并使用人称代词 i,您的文本真的很难阅读。在英语中,如果是人称代词,则必须大写 I。

标签: javascript


【解决方案1】:

+ 为字符串重载 - 它也是连接运算符。比如

'5' + 2 // '52'

但是- 并没有以同样的方式重载;它将字符串转换为数字:

'5' - 2 // 3

【讨论】:

  • 谢谢。这解释得很清楚
【解决方案2】:

回答实际问题:

为什么i 会成为我循环中的字符串?

因为for...in 会遍历对象的属性名称,而这些属性名称始终是字符串。请参阅MDN documentation 了解更多信息。您还会发现一个大警告框,它解释了为什么不将 for...in 与数组一起使用。

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 2016-03-08
    • 1970-01-01
    • 2021-09-26
    • 2015-02-20
    • 1970-01-01
    • 2015-12-24
    • 2019-10-09
    • 2020-11-28
    相关资源
    最近更新 更多