字符串上的 for/in 循环是什么意思



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

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

输出:

0  
1  
2  

字符串上的 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));
}

是的。

您看到的是字符串中属性的索引/名称。像"abc"[0]一样索引字符串会导致a .

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

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

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

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

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

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

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

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

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

如果要使用此处名为item的索引,则可以单独访问字符,如下所示

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

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

这将输出字母:

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

    a
    b
    c

最新更新