【问题标题】:for-in loop VS in-operatorfor-in 循环 VS in-operator
【发布时间】:2015-10-31 17:29:35
【问题描述】:

我认为自己是一名 JS 资深人士,但我才第一次意识到 for ... in 循环与 in 运算符的作用非常不同:

"length" in []; // true
for (k in []) { if(k == "length") alert(); }; // k will never be "length"

所以这让我想到了我的问题:为什么 in 运算符会出现在 for ... in 循环中?

恕我直言,这完全是误导,因为它做不同的事情。此外,首先 for 操作使 JS 引擎获取所有可枚举属性,然后在该子集上使用 in 运算符的想法是错误的:仅仅因为 in 运算符接受 all可能的属性,无论是原型还是拥有,无论是访问器属性还是数据属性。那么如果for 已经简化为可枚举的对象属性,它如何过滤掉任何东西呢?

【问题讨论】:

  • 您的意思是将其输入到 Brendan Eich 的电子邮件中吗?
  • for in 循环中的令牌in 不是in 运算符。
  • @Pointy:也许他会来回答这个问题? :-)
  • @Bergi:嗯,我想总结一下。 :)
  • ES6 也有了新的含义, * 代表 function* 和 yeid* 。扩展运算符是三个点,下划线成为箭头函数的无参数。 map和Map是完全不同的两个东西,[+!+[]+!+[]+!+[]+!+[]]+[+!+[]+!+[]]就是生命的意义。这就是人类可读语法的本质。

标签: javascript for-loop prototype enumeration accessor


【解决方案1】:

所以这让我想到了我的问题:为什么in 运算符会出现在for ... in 循环中?

不是。 for … in 循环构造中的 in 标记不是运算符,就像它不是表达式中的运算符一样

x = {in: 5}.in

这只是区分for ( … in … )for (…; …; …) 循环的标记之一。鉴于没有 for (…) 语句,in 令牌在 relational expression 中的角色永远不会与此冲突。

【讨论】:

  • 我理解并且我想这是可以给出的最准确的答案。我仍然觉得它具有误导性,因为认为for ... in 循环基于in 运算符并在in 返回true 的情况下执行是非常直观的。
  • @BM:嗯,这两种用法都与属性有关,我认为没有很多替代方法。无论如何,for in 枚举不枚举不可枚举的属性应该是很自然的。
猜你喜欢
  • 2016-09-07
  • 1970-01-01
  • 2011-10-31
  • 2017-02-12
  • 2011-07-12
  • 2018-01-14
  • 2018-11-14
  • 2015-05-05
  • 1970-01-01
相关资源
最近更新 更多