我对这个结果感到惊讶。我认为该代码段应该在控制台上显示“ function ...”:
let a = [
function() { return 1; }
];
for (let f in a) {
console.log(f);
}
..但是它显示“ 0”-for循环将函数强制为字符串({f
无法求值,否则会抛出错误,表明它不是函数)。在Firefox和Chrome中会发生这种情况。
如果使用(首选)数组索引迭代,则其行为将符合预期:
for (let i = 0; i < a.length; i++) {
console.log(typeof(a[i]));
}
以上将“功能”打印到控制台。
为什么JS引擎强制在第一个代码段中将其字符串化?
PS:我知道在数组中使用..in是一种不好的形式,但是我只是想了解JS引擎在做什么。