【问题标题】:JavaScript weirdness [duplicate]JavaScript的怪异[重复]
【发布时间】:2020-04-03 23:16:33
【问题描述】:

有人能解释一下为什么它会打印出 ['01', '11', '21' ]。我通常是 java - Python - PHP 开发人员

function g(element){
    return element + 1;
}
function f(points, g){
    let newArray = [];
    for(let point in points){
       newArray.push(g(point));
    }
    return newArray;
}



let array = [1, 2, 3];

console.log(f(array, g));

【问题讨论】:

  • 不要对数组使用 for-in。您会看到这一点,因为它将索引视为字符串。

标签: javascript string concatenation


【解决方案1】:

是的,这是 javascript 的怪事。

首先,for in 循环将遍历 indizes,而不是数组的内容。这是"0", "1", "2"

indizes 似乎也被解释为字符串。

"0"+1=01
"1"+1=11
"2"+1=21

【讨论】:

    【解决方案2】:

    您在 for 语句中使用 in 关键字循环 Keys,要循环数组项使用 of 关键字。

    所以你的循环会是这样的:

    for(let point of points){
        newArray.push(g(point));
    }
    

    【讨论】:

      【解决方案3】:

      输出看起来好像输入数组是 ["0","1","2"] 而不是 [1,2,3]。

      这里的错误是 javascript 中的 for..in 语法用于循环遍历对象/数组的键/索引,而不是其值。

      这里要注意的一点(我之前不知道并检查过)是数组的索引在使用 for..in 时被转换为字符串,这就是为什么将数字连接而不是求和的原因。

      无论如何,循环遍历数组元素的一种正确语法是 for..of 语法,它的使用方式与 for..in 语法一样,并且行为符合您的预期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-02
        • 2012-10-29
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多