字符串中for / in循环的含义是什么?

时间:2014-12-05 21:17:34

标签: javascript

这段代码甚至是有效的JavaScript吗?

for (item in "abc") {  
    console.log(item);  
}  

输出:

0  
1  
2  

6 个答案:

答案 0 :(得分:3)

  

字符串中for / in循环的含义是什么?

如果您将字符串视为字符数组,则循环字符串的目的是遍历每个字符。

在JavaScript for..in循环中,将返回对象或数组中的,因此您所看到的是数组索引。更有用的格式是:

var str,
    item;
str = "abc";
for (item in str) {
    console.log(str[item]);
}

将输出'a''b''c'

  

这段代码甚至是有效的JavaScript吗?

现在,但过去有问题。

请注意,对于较旧的浏览器,字符串不支持数组索引,因此迭代字符串中字符的向后兼容方式是:

var str,
    i;
str = "abc";
for (i = 0; i < str.length; i++) {
    console.log(str.charAt(i));
}

答案 1 :(得分:1)

是。

您看到的是字符串中属性的索引/名称。 将字符串编入索引"abc"[0]会产生a

您也可以使用属性名称索引对象。

var x = {
  foo: "hi"
};
console.log(x["foo"]);

循环只会遍历对象的所有成员。

答案 2 :(得分:1)

它基本上是一个遍历每个项目的foreach循环。在这种情况下,字符串“abc”看起来它只是打印出字符串位置,但这可以与对象一起使用来迭代它们。

答案 3 :(得分:1)

这是有效的代码。 JavaScript中的for in循环将遍历对象中的一组键。在"abc"的情况下,键包括每个字符的索引,以及添加到String原型的任何其他属性。

由于for in找到了这些原型属性(特别是如果对象已经被修改),通常建议使用一种机制来跳过它们。在这种情况下,您可以使用

if(!"abc".hasOwnProperty(item))continue;

如果你在这里使用名为item的索引,你可以单独访问这些字符,如下所示

&#13;
&#13;
for (item in "abc") {  
    console.log(item);
    //this will log the letters one at a time
    console.log("abc"[item]);
}
&#13;
&#13;
&#13;

答案 4 :(得分:1)

for/in迭代对象的可枚举属性。

因为JS允许您使用str[1]中的数组语法读取字符串的字符,所以它会将每个索引的数字属性公开到字符串中,这就是0, 1, 2输出的来源。这些是字符串对象的可枚举属性。

答案 5 :(得分:1)

记录字符串中的字母索引。

输出字母:

string = "abc"; for(var i = 0; i < string.length; i++){ console.log(string[i]); } 输出:

    a
    b
    c