我认为自己是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
运算符接受所有可能的属性,无论是原型属性还是自己的,无论是访问器属性还是数据属性。那么,如果for
已经减少到可枚举对象属性,它如何过滤掉任何内容呢?
这就引出了我的问题:为什么
in
算子存在于for ... in
循环中?
事实并非如此。for … in
循环结构中的in
标记不是运算符,就像它不是表达式中的运算符一样
x = {in: 5}.in
这只是区分for ( … in … )
和for (…; …; …)
循环的标志之一。假设没有for (…)
语句,那么in
令牌在关系表达式中的作用永远不会与此冲突。