"for in" 循环如何在 Javascript 中工作?
How does "for in" loop work in Javascript?
程序如下,
function sum(x) {
console.log(typeof x[0]); //return Number
var s=0;
for(var e in x) {
console.log(typeof e); //This return string
s+=e;
}
return s;
}
console.log(sum([1,2,3,4,5])); //return 001234
如果我使用数字构造函数,那么它工作正常。
function sum(x) {
console.log(typeof x[0]); // return Number
var s=0;
for(var e in x) {
s+=Number(e);
}
return s;
}
console.log(sum([1,2,3])); //return 6
for in
循环发生了什么?
来自MDN:
The for...in statement iterates over the enumerable properties of an object, in original insertion order.
和
A different property name is assigned to variable on each iteration.
属性 名称是字符串。所以你得到了字符串。 +
运算符将连接字符串。
如果将值转换为数字,则不再有字符串。 +
运算符将对数字执行加法运算。
console.log(sum([1,2,3]); //return 6
没有
它会抛出一个错误,因为你 )
太少了。如果你解决了这个问题,它会输出 3
因为你在循环遍历 属性 名称 而不是值,所以你要添加 0
, 1
和 2
。
其他人已经指出 for-in 遍历属性,而不是值。在数组的情况下,属性是索引。
function sum(x) {
var s=0;
for(var e in x) {
s+=e;
}
return s;
};
var array = [1,2,3,4,5];
array.b="z";
console.log(sum(array)); // prints 001234b
在生成的 001234b 字符串中,您有:
前导“0”:s的初始值
然后是“0”,因为第一个索引是 0
然后是“1”,等等
for ... in es6中的循环用于遍历对象。
从技术上讲,数组是一个对象,它在数组的索引上循环。您可以在 for 循环中通过 console.logging 看到这一点。
使用 For ... of loop 来正常循环数组。
function sum(x) {
console.log(typeof x[0]); //return Number
var s=0;
for(var e of x) { // of loop
console.log(e)
s+=e;
}
return s;
}
console.log(sum([1,2,3,4,5])); //return 001234
程序如下,
function sum(x) {
console.log(typeof x[0]); //return Number
var s=0;
for(var e in x) {
console.log(typeof e); //This return string
s+=e;
}
return s;
}
console.log(sum([1,2,3,4,5])); //return 001234
如果我使用数字构造函数,那么它工作正常。
function sum(x) {
console.log(typeof x[0]); // return Number
var s=0;
for(var e in x) {
s+=Number(e);
}
return s;
}
console.log(sum([1,2,3])); //return 6
for in
循环发生了什么?
来自MDN:
The for...in statement iterates over the enumerable properties of an object, in original insertion order.
和
A different property name is assigned to variable on each iteration.
属性 名称是字符串。所以你得到了字符串。 +
运算符将连接字符串。
如果将值转换为数字,则不再有字符串。 +
运算符将对数字执行加法运算。
console.log(sum([1,2,3]); //return 6
没有
它会抛出一个错误,因为你 )
太少了。如果你解决了这个问题,它会输出 3
因为你在循环遍历 属性 名称 而不是值,所以你要添加 0
, 1
和 2
。
其他人已经指出 for-in 遍历属性,而不是值。在数组的情况下,属性是索引。
function sum(x) {
var s=0;
for(var e in x) {
s+=e;
}
return s;
};
var array = [1,2,3,4,5];
array.b="z";
console.log(sum(array)); // prints 001234b
在生成的 001234b 字符串中,您有: 前导“0”:s的初始值 然后是“0”,因为第一个索引是 0 然后是“1”,等等
for ... in es6中的循环用于遍历对象。
从技术上讲,数组是一个对象,它在数组的索引上循环。您可以在 for 循环中通过 console.logging 看到这一点。
使用 For ... of loop 来正常循环数组。
function sum(x) {
console.log(typeof x[0]); //return Number
var s=0;
for(var e of x) { // of loop
console.log(e)
s+=e;
}
return s;
}
console.log(sum([1,2,3,4,5])); //return 001234