Javascript:请解释这个for循环正在做什么

时间:2017-06-17 15:59:15

标签: javascript

学习javascript并遇到了一些我无法弄清楚的事情。打开devtools并转到您的控制台

countries = ['Germany', 'Argentina', 'Brazil', 'Netherlands'];

for (country in countries[1]) {
  console.log(country); //or console.log(countries)
};

我预测它会要么 答:只运行输出“阿根廷”或
的第一个索引 B:从第一个索引开始到结束。

相反,它运行9次,索引整个数组。为什么它会运行9次,是否有理由使用它或者我遇到了一些无用的东西?

7 个答案:

答案 0 :(得分:1)

for ... in循环意味着循环对象的属性。

countries[1]是一个字符串。测功

for (country in countries[1])

表示循环遍历字符串对象的属性,将属性名称指定给country。在javascript中,类似数组的东西只是其属性恰好是数字的对象。因此,country会假设数字为012等。它会循环9次,因为“阿根廷”有九个字母。

如果您当时要在循环中访问:

countries[1][country]

每次迭代都会为您提供序列Argen等字符。

答案 1 :(得分:0)

它循环遍历字符串'Argentina'中的字符(或更确切地说,它们的索引)。

for ... in循环是JavaScript的一部分,您应该在开始在生产代码中使用它之前阅读它。它通常不会做你期望的事情,因为它将遍历一个对象的所有可枚举属性(它可能属于对象的原型链,而不仅仅是对象本身)。

你可能想要一个常规的旧for循环:

for (var i = 0; i < countries.length; i++) {
  console.log(countries[i]);
}

如果您所处的环境中可以使用ES6(例如node.js或使用babel / typescript进行转换),则可以使用for ... of循环:

for (const country of countries) {
  console.log(country);
}

答案 2 :(得分:0)

for ... in返回你正在迭代的关键。

for ... of返回您正在迭代的容器的每个元素的值。

如果您使用它,它会打印出阿根廷。

答案 3 :(得分:0)

由于您循环遍历countries[1],它将循环遍历字符串'Argentina'中的字符。由于'Argentina'有九个字母,因此循环将运行九次。

答案 4 :(得分:0)

你正在遍历国家[1],在这种情况下是'阿根廷'。 变量'country'的值在每次迭代时更改为它在字符串country [1]中查看的索引 为了最好地说明这一点,您可以尝试使用此脚本打印出阿根廷的每个字母,以及通过字符串原型提供的方法。

countries = ['Germany', 'Argentina', 'Brazil', 'Netherlands'];

for (country in countries[1]) {
 console.log(countries[1][country]); 
};

答案 5 :(得分:0)

在JavaScript中,您可以在数组内部使用数组。因此,在您的代码中,您要求循环迭代[1]数组countries[]索引上的数组。

现在,在您的数组中,索引[1]处会出现一个字符串。所以Js将它分解成一个字符数组并迭代它。

答案 6 :(得分:0)

for in statemant在Object之后接受in作为第二个参数。 如果你传递一个数组,它将被强制转换为Object。第一个参数是值,而是。所以'argentina'可能被迫成为像对象一样的对象:

{0:'a',1:'r',2:'g',3:'e',4:'n',5:'t',6:'i',7:'n',8:'a'}

因此,如果您尝试console.log(countries[country]);,则会记录字符。

这很没用。 JS有一堆很没用的东西,然后它有很大的作用。尽量使用好的。