【问题标题】:Understanding for in loop (javascript)了解 for in 循环 (javascript)
【发布时间】:2016-03-30 13:46:01
【问题描述】:

我对 JS 有点陌生,我正在尝试了解 for/in 循环的真正工作原理,这里有一些示例代码:

phoneBook = {};
phoneBook.bill = { name : "bill", lastName "hayder" };
phoneBook.steve = { name : "steve", lastName "garcia" };

for ( obj in phoneBook )
{
    console.log(obj);
};

当我运行这段代码时,我得到了 bill 和 steve 作为输出,我的问题是,如果这就是迭代器所持有的,为什么我被允许做 phoneBook[obj] 并使用它?如果我手动输入 phoneBook[bill] 会出错,我只能使用 phoneBook.bill 或 phoneBook["bill"]。

感谢您的帮助。

【问题讨论】:

  • 因为 bill 作为标识符是未定义的。 JS 语法只允许objectName["property"]objectName.property。如果bill 是字符串的变量,它会起作用。 obj 就是这种情况—— 它是一个字符串。
  • 欲了解更多信息,您可以查看在 js developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… 中使用对象是如何工作的

标签: javascript iterator for-in-loop


【解决方案1】:

当你写phonebook[something] 时,它意味着something 应该是一个返回字符串的表达式,它应该找到名称为该字符串的属性。

phonebook[obj]的情况下,变量obj的值将是字符串"bill""steve",然后查找对应的属性。

如果您编写phonebook[bill],它会尝试使用bill 作为变量名,并期望它包含一个用于命名属性的字符串。但是没有名为bill的变量,所以会报错。

【讨论】:

    【解决方案2】:

    Javascript 对象只是键值对。

    phoneBook = {};
    phoneBook.bill = { name : "bill", lastName: "hayder" };
    phoneBook.steve = { name : "steve", lastName: "garcia" };
    

    在本例中,phoneBook 对象有两个键值属性,billsteve。但属性本身是对象,每个都包含属性namelastName

    键值对可以通过两种方式访问​​:对象方式和字典方式。对象方式是通过phoneBook.bill访问,字典方式是通过phoneBook['bill']访问。请注意,使用字典方式意味着只需将属性名称传递给对象。

    现在,phoneBook[bill] 无效,因为 JS 认为 bill 是一个变量,并试图找到它。这就是为什么你应该使用phoneBook['bill']phoneBook["bill"]。你可以使用这种字典形式,但我建议你使用phoneBook.bill方法。

    我希望我回答了你的问题。 :)

    【讨论】:

      【解决方案3】:

      修复了一些语法错误

      phoneBook = {};
      phoneBook.bill = { name: "bill", lastName: "hayder" };
      phoneBook.steve = { name: "steve", lastName: "garcia" };
      
      for (obj in phoneBook)
      {
          console.log(obj);
      };
      

      Javascript 基础知识

      phoneBook 有房产账单

      在 javascript 中,可以使用此属性账单来引用

      • phoneBook.bill
      • phoneBook['bill']

      当您引用 phoneBook[bill] 时,您将收到一个错误,因为 javascript 正在寻找包含 string bill

      的变量

      你能做的就是这样尝试

      var bill = 'bill';
      phoneBook[bill]
      

      【讨论】:

        猜你喜欢
        • 2013-08-31
        • 2011-07-12
        • 2012-11-18
        • 2015-02-25
        • 2011-10-21
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多