学习javascript并遇到了一些我无法弄清楚的事情。打开devtools并转到您的控制台
countries = ['Germany', 'Argentina', 'Brazil', 'Netherlands'];
for (country in countries[1]) {
console.log(country); //or console.log(countries)
};
我预测它会要么
答:只运行输出“阿根廷”或
的第一个索引
B:从第一个索引开始到结束。
相反,它运行9次,索引整个数组。为什么它会运行9次,是否有理由使用它或者我遇到了一些无用的东西?
答案 0 :(得分:1)
for ... in循环意味着循环对象的属性。
countries[1]
是一个字符串。测功
for (country in countries[1])
表示循环遍历字符串对象的属性,将属性名称指定给country
。在javascript中,类似数组的东西只是其属性恰好是数字的对象。因此,country
会假设数字为0
,1
,2
等。它会循环9次,因为“阿根廷”有九个字母。
如果您当时要在循环中访问:
countries[1][country]
每次迭代都会为您提供序列A
,r
,g
,e
,n
等字符。
答案 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有一堆很没用的东西,然后它有很大的作用。尽量使用好的。