The JavaScript warning "JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead" occurs when a
for each (variable in obj)
statement is used.
Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead
警告
JavaScript 1.6's
for each (variable in obj)
statement is deprecated, and will be removed in the near future.
for each...in
has been used to iterate over the specified object values.
var object = { a: 10, b: 20 };
for each (var x in object) {
console.log(x); // 10
// 20
}
You can now use the standard
for...in
loop to iterate over specified object keys, and get each value inside the loop:
var object = { a: 10, b: 20 };
for (var key in object) {
var x = object[key];
console.log(x); // 10
// 20
}
Or, using
for...of
(ES2015) and
Object.values
(ES2017), you can get an array of the specified object values and iterate over the array like this:
var object = { a: 10, b: 20 };
for (var x of Object.values(object)) {
console.log(x); // 10
// 20
}
for each...in
has been used to iterate over specified array elements.
var array = [10, 20, 30];
for each (var x in array) {
console.log(x); // 10
// 20
// 30
}
This is now possible with
for...of
(ES2015) loops as well.
var array = [10, 20, 30];
for (var x of array) {
console.log(x); // 10
// 20
// 30
}
for each...in
does nothing if the specified value is
null
or
undefined
, but
for...of
will throw an exception in these cases.
function func(array) {
for each (var x in array) {
console.log(x);
}
}
func([10, 20]); // 10
// 20
func(null); // prints nothing
func(undefined); // prints nothing
To rewrite
for each...in
statements so that values can be
null
or
undefined
with
for...of
as well, you need to guard around
for...of
.
function func(array) {
if (array) {
for (var x of array) {
console.log(x);
}
}
}
func([10, 20]); // 10
// 20
func(null); // prints nothing
func(undefined); // prints nothing
There's a deprecated idiom to iterate over the specified object's key-value pairs using
for each...in
and the deprecated
Iterator
对象。
var object = { a: 10, b: 20 };
for each (var [key, value] in Iterator(object)) {
console.log(key, value); // "a", 10
// "b", 20
}
You can now use the standard
for...in
loop to iterate over specified object keys, and get each value inside the loop:
var object = { a: 10, b: 20 };
for (var key in object) {
var value = object[key];
console.log(key, value); // "a", 10
// "b", 20
}
Or, using
for...of
(ES2015) and
Object.entries
(ES2017), you can get an array of the specified object values and iterate over the array like this:
var object = { a: 10, b: 20 };
for (var [key, value] of Object.entries(object)) {
console.log(key, value); // "a", 10
// "b", 20
}