Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript怪诞_Javascript_String_Concatenation - Fatal编程技术网

JavaScript怪诞

JavaScript怪诞,javascript,string,concatenation,Javascript,String,Concatenation,有人能解释一下为什么它会打印['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 arra

有人能解释一下为什么它会打印['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
关键字循环
键,以循环数组项使用
of
关键字

因此,您的循环将如下所示:

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

是的,这是一个javascript的怪异之处

首先,in
中的
for循环将迭代索引,而不是数组的内容。这是
“0”、“1”、“2”

印度群岛似乎也被解释为字符串

“0”+1
=
01

“1”+1
=
11

“2”+1
=
21


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

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

这里需要注意的是(我以前不知道并检查过),当使用for..in时,数组的索引被转换为字符串,这就是数字被串联而不是求和的原因


无论如何,循环遍历数组元素的一个正确语法是for..of语法,它与for..in语法一样使用,其行为与您预期的一样。

不要使用for for数组。你看到了这一点,因为它将索引视为字符串。