用于运算符中的循环内VS

for-in loop VS in-operator

本文关键字:VS 循环 运算符 用于      更新时间:2023-09-26

我认为自己是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令牌在关系表达式中的作用永远不会与此冲突。