javascript - 这个 "for..in"语句为什么以及如何工作?

标签 javascript for-in-loop

我正在通过 CodeCademy 学习 JavaScript,并且在“联系人列表”项目中;具体来说,“寻找 friend ”类(class)。它让我了解了对象的工作原理以及如何查看它们。

演示代码如下:

var friends = {};
friends.bill = {
  firstName: "Bill",
  lastName: "Gates",
  number: "(206) 555-5555",
  address: ['One Microsoft Way','Redmond','WA','98052']
};
friends.steve = {
  firstName: "Steve",
  lastName: "Jobs",
  number: "(408) 555-5555",
  address: ['1 Infinite Loop','Cupertino','CA','95014']
};

var list = function(obj) {
  for(var prop in obj) {
    console.log(prop);
  }
};

var search = function(name) {
  for(var prop in friends) {
    if(friends[prop].firstName === name) {
      console.log(friends[prop]);
      return friends[prop];
    }
  }
};

list(friends);
search("Steve");

所以我明白 friends 是一个对象,billstevefriends 中的对象。我不明白的是 listsearch 函数如何查看 friends。我看到它使用了 for/in 循环...但是在学习循环之后,我看不到任何条件,也看不到任何迭代机制。我不知道这个 for/in 是如何工作的。也许如果有人可以提供等效语法的替代方法;也许,甚至,如果有人能用口语化的英语解释 why/how for/in works?

谢谢!

注意:标记为与语言无关,因为这是一个更高级别的编程/概念问题,即使这里的语法是 JavaScript。

最佳答案

实际上并没有等效的替代语法; for (x in y) 迭代机制。

类似于

for ( x = 0; x < somearray.length; ++x )

因为它依次将 x 设置为每个索引。但由于 JS 对象根据定义是无序的,因此无法保证您将获得任何特定顺序的索引。

没有条件。你会达到每一个指数。这是一个不同的结构。

所以如果我们有:

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

然后说:

for ( var x in obj )
{
  console.log( x + ": " + obj[x] );   // prints "a: 1", etc.
}

然后在那个循环中正好有一次,x == "a"。恰好一次,x == "b"。恰好一次,x == "c"。只有那些,没有指定的顺序。

关于javascript - 这个 "for..in"语句为什么以及如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538839/

相关文章:

javascript - react 路由器链接; activeClassName 不工作

javascript - 使用 Three.js 将站点更改为连续动画

javascript - 交换 CSS 颜色

javascript - 从数据网格抓取/检索数据 - DOM 到 CSV 控制台输出

Swift:PlayGround 上的 For-in 循环非包容性上层

javascript - 为什么这个不正确的 JavaScript 程序会产生正确的答案?

Swift:for-in循环要求 '[DeepSpeechTokenMetadata]'符合 'Sequence'

javascript - 如何使用表格单元格值获取数据? PHP 简单 HTML DOM 解析器

for-loop - 如何使用 DrawerHeader 和 ListView.builder 构建抽屉

JavaScript:for..in 循环内的 else 语句破坏了我的 if 语句