for-in循环VS in-operator

时间:2015-10-31 17:29:36

标签: javascript for-loop prototype enumeration accessor

我认为自己是JS的老手,但刚才我第一次意识到for ... in循环与in运算符有很大不同:

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

因此,这让我想到了一个问题:为什么in循环中存在for ... in运算符?

Imho它完全是误导,因为它做了不同的事情。此外,首先for操作使JS引擎获取所有可枚举属性然后在该子集上使用in运算符的概念是错误的:仅仅因为in运算符接受所有可能的属性,无论是原型还是自己的属性,无论是访问者属性还是数据属性。那么,如果for已经减少到可枚举的对象属性,它如何过滤掉任何东西?

1 个答案:

答案 0 :(得分:3)

  

所以这让我想到了一个问题:为什么in循环中存在for ... in运算符?

不是。 in循环结构中的for … in标记不是运算符,也不是表达式中的一个

x = {in: 5}.in

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