JavaScript怪诞
有人能解释一下为什么它会打印['01','11','21']。我通常是java-Python-PHP开发人员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
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数组。你看到了这一点,因为它将索引视为字符串。