为什么数组中的数字元素的类型被评估为javascript中的字符串

zyx*_*xue 1 javascript

例如

var a = [1, 2, 3];
for (var i in a) {
    console.log(typeof i);
}
Run Code Online (Sandbox Code Playgroud)

产量

string
string
string
Run Code Online (Sandbox Code Playgroud)

我是一名Python程序员,我发现它非常不直观.为什么评估的元素不是数字?

Kev*_*Bot 5

你循环遍历keys对象.这意味着您实际测试的键是"0","1","2".

你可以在这里看到,如果你也安慰i.此外,如果您控制位于阵列中该索引处的值,并对其进行测试,您将看到它是一个数字:

var a = [1, 2, 3];
for (var i in a) {
  console.log(i, typeof i, a[i], typeof a[i]);
}
Run Code Online (Sandbox Code Playgroud)

在ES5中,向循环遍历其值(和索引)的数组添加了一个新功能Array#forEach:

var a = [1, 2, 3];
a.forEach(function(v) {
  console.log(v, typeof v);
});
Run Code Online (Sandbox Code Playgroud)

在ES2015 +中,for-of添加了,它将使用for-style循环遍历值:

// ES2015+ only!!
let a = [1, 2, 3];
for (let v of a) {
  console.log(v, typeof v);
}
Run Code Online (Sandbox Code Playgroud)