javascript-for-in循环VS in-operator

我认为自己是JS的资深人士,但是就在这之前我第一次意识到for … in循环与in运算符有很大不同:

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

所以这引出我的问题:为什么in …循环中始终存在in运算符?

恕我直言,这完全是一种误导,因为它做了不同的事情.同样,首先使用for操作使JS引擎具有所有可枚举的属性,然后在该子集上使用in运算符的想法是错误的:仅仅是因为in运算符接受所有可能的属性,无论是原型还是拥有的,无论是存取器还是数据,属性.那么,如果for已经减少到可枚举的对象属性,它将如何过滤掉所有内容?

解决方法:

So this brings me to my question: why is the in operator at all present in the for ... in loop?

不是. for…in循环构造中的in令牌不是运算符,同样它在表达式中也不是一个

x = {in: 5}.in

它只是将for ( … in … )for (…; …; …)循环区分开的标记之一.鉴于没有for(…)语句,因此relational expression中in令牌的作用永远不会与此冲突.

上一篇:java-为什么在打印输出时必须将枚举元素转换为String?


下一篇:为什么list.remove只删除第二个项目?