【问题标题】:For.. in loop - why does it work?For.. in loop - 为什么它有效?
【发布时间】:2016-10-13 22:01:43
【问题描述】:

我正在阅读“面向网页设计师的 JavaScript”一书,我来到了这个例子:

var fullName = {
  "first": "John",
  "last": "Smith"
};
for (var name in fullName) {
  console.log(name + ": " + fullName[name]);
}

输出是:

"first: John"
"last: Smith"

我不明白的是:我在哪里告诉程序获取字符串“first”和“last”。我的意思是,循环对象“fullName”,我看不到“name”如何与“first”和“last”相关联。我希望这很清楚。 你能帮我吗?非常感谢!

【问题讨论】:

  • for 循环遍历对象的键(存储在 name 中),然后像正常一样访问相应的值 (fullName[name])

标签: javascript for-loop


【解决方案1】:

for..in 迭代对象的。然后您可以访问对象值by name using brackets

var obj = {
  a: 1,
  b: 2,
  c: 3
};

for (var key in obj) {
  console.log('Key:', key);
  console.log('obj[key] == obj["' + key + '"] == obj.' + key);
  console.log('obj.' + key + ' == ' + obj[key]);
}

【讨论】:

    【解决方案2】:

    学习和/或理解非常简单。您正在循环访问对象 fullName 中的所有属性。对于每个属性,您将为其指定临时名称/别名 name

    因此,您可以将其更改为 for (var anything in fullName),然后在 for 循环的主体中,您将通过名称 anything 引用每个属性,如下所示:

    for (var anything in fullName) {
    
        // anything is an alias for the current property your on of the object you're looping through
        console.log(anything + ": " + fullName[anything]);
    
    }
    

    【讨论】:

      【解决方案3】:

      for..in 循环将遍历对象的键。如果你在一个数组上使用它,那么它(大多数浏览器引擎)会在后台将数组转换为一个对象(阅读更多关于字典模式)并迭代键。

      您可以使用查看密钥

      var fullName = {
        "first": "John",
        "last": "Smith"
      };
      console.log(Object.keys(fullName));

      本质上这个调用的结果然后被迭代。请记住,使用 for..in 并不能保证键值对的顺序。

      【讨论】:

        【解决方案4】:

        上面代码中name代表对象的key,

        first 和 last 都是对象中的键。并可用于访问对象中的值。

        就像在循环的第一次运行中,它会是这样的

        for("first" in fullName) {
         console.log("first" + ": " + fullName["first"] //John);
        }
        

        【讨论】:

          【解决方案5】:

          当你遍历一个对象时,你会遍历键。这个对象的键是firstlast。更多信息请参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

          【讨论】:

            猜你喜欢
            • 2020-04-19
            • 2014-05-19
            • 2015-09-09
            • 1970-01-01
            • 2016-02-23
            • 2020-04-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多