我认为自己是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
已经减少到可枚举的对象属性,它如何过滤掉任何东西?
答案 0 :(得分:3)
所以这让我想到了一个问题:为什么
in
循环中存在for ... in
运算符?
不是。 in
循环结构中的for … in
标记不是运算符,也不是表达式中的一个
x = {in: 5}.in
它只是区分for ( … in … )
和for (…; …; …)
循环的令牌之一。鉴于没有for (…)
语句,in
令牌在relational expression中的角色永远不会与此发生冲突。