2017-06-17 55 views
-3

学习javascript,遇到了一些我无法弄清楚的东西。打开devtools并转到您的控制台Javascript:请解释一下这个for循环在做什么

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

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

我预测它要么
答:只有运行第一个索引输出“阿根廷”或
B:从第一个指数到年底动工。

相反,它运行9次,索引整个数组。为什么它运行了9次,是否有这样的一个原因应该使用,或者我是否遇到了一些相当无用的东西?

+0

代码扩展到记录两个* key *和* value *:'console.log('key:',country,'value:',countries [1] [country]);'' – Thomas

回答

1

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

countries[1]是一个字符串。人机工程学

for (country in countries[1]) 

意味着遍历字符串对象的属性,分配属性名称country。在javascript中,类似数组的东西只是属性碰巧是数值的对象。因此country的数字为0,1,2等。它循环9次,因为'阿根廷'有9个字母。

如果你再在环路接入:

countries[1][country] 

每次迭代会给你的序列Argen在性格等

0

它在字符串'Argentina'中循环字符(或者说,它们的索引)。

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

你可能需要一个普通的旧的for循环:

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

如果你是在一个环境中,你可以使用ES6(如Node.js的或与巴贝尔/打字稿transpiling),您可以使用for ...的循环:

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

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

for ...返回要迭代的容器的每个元素的值。

如果您用于...它会打印出阿根廷。

0

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

0

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

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

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

在JavaScript中,你可以有数组在里面的数组。因此,在您的代码中,您要求循环迭代countries[]数组[1]索引中的数组。

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

0

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

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

所以,如果你尝试console.log(countries[country]);它会记录字符。

这很无用。 JS有很多无用的东西,然后它有很好的一面。尝试使用好的。

相关问题