【发布时间】:2018-12-25 15:18:07
【问题描述】:
我的理解是for...in 循环旨在迭代 Javascript 中的对象。 See this post 和 this post.
举个例子。这会在我的控制台中返回“Uncaught TypeError: items is not iterable”。
var text = {
name: "Coptic",
ranges: [[994, 1008], [11392, 11508], [11513, 11520]],
direction: "ltr",
year: -200,
living: false,
link: "https://en.wikipedia.org/wiki/Coptic_alphabet"
};
function dominantDirection(items) {
for (let item of items) {
if (item.direction === 'ltr') {
return 'ltr';
} else {
return 'rtl';
}
}
}
console.log(dominantDirection(text));
如果我将对象包装在一个数组 [] 中,它可以正常工作。 但是,我的第二个示例按预期工作。
var object1 = {a: 1, b: 2, c: 3};
var string1 = "";
function loopObj() {
for (var property1 in object1) {
console.log(string1 = string1 + object1[property1]);
}
}
console.log(loopObj());
为什么第一个例子需要数组而第二个不需要?
【问题讨论】:
-
text不是一个数组! -
您的第一个代码示例使用
for ... of而不是for ... in。 -
两个 sn-ps 都在做完全不同的事情。第一种是遍历对象集合并在检查集合中第一个对象的方向后立即返回。第二个 sn-p 遍历传入对象的每个属性。
-
在您的第一个示例中,您不必遍历
text对象来检索方向(您基本上是在进行两级迭代)。只需通过items.direction访问方向即可。 -
@Pointy 哇,我觉得很傻。谢谢!
标签: javascript object for-loop for-in-loop