Javascript 对于在环与在环运算符 我认为自己是个JS老手,但现在我第一次意识到……在循环中执行的操作与在运算符中执行的操作非常不同: "length" in []; // true for (k in []) { if(k == "length") alert(); }; // k will never be "length"

Javascript 对于在环与在环运算符 我认为自己是个JS老手,但现在我第一次意识到……在循环中执行的操作与在运算符中执行的操作非常不同: "length" in []; // true for (k in []) { if(k == "length") alert(); }; // k will never be "length",javascript,for-loop,prototype,enumeration,accessor,Javascript,For Loop,Prototype,Enumeration,Accessor,这就引出了我的问题:中的操作符为什么在中出现。。。在循环中? 我认为这完全是误导,因为它做了不同的事情。同样,首先for操作使JS引擎获取所有可枚举属性,然后在该子集上使用in操作符的概念也是错误的:因为in操作符接受所有可能的属性,无论是原型属性还是所有者属性,无论是访问者属性还是数据属性。那么,如果的已减少为可枚举对象属性,它将如何筛选出任何内容呢 这就引出了我的问题:为什么中的操作符在中出现。。。在循环中 事实并非如此。for…in循环构造中的in标记不是运算符,正如它不是表达式中的运算符

这就引出了我的问题:中的
操作符为什么在
中出现。。。在
循环中?

我认为这完全是误导,因为它做了不同的事情。同样,首先
for
操作使JS引擎获取所有可枚举属性,然后在该子集上使用
in
操作符的概念也是错误的:因为
in
操作符接受所有可能的属性,无论是原型属性还是所有者属性,无论是访问者属性还是数据属性。那么,如果
已减少为可枚举对象属性,它将如何筛选出任何内容呢

这就引出了我的问题:为什么
中的
操作符在
中出现。。。在
循环中

事实并非如此。
for…in
循环构造中的
in
标记不是运算符,正如它不是表达式中的运算符一样

x = {in: 5}.in

它只是区分循环和循环的标志之一。鉴于(…)
语句中没有
for(…)
语句,那么
in
令牌在a中的作用永远不会与此冲突。

您是想将此输入到给Brendan Eich的电子邮件中吗?
for in
循环中的
in令牌不是
in
操作符。@Pointy:也许他来了并回答了这个问题?:-)@伯吉:我想这就是总结ES6还有新的含义,即*for function*和yeid*。扩展运算符是三个点,下划线成为箭头函数的无参数。地图和地图是两个完全不同的东西,[+!+[]+!+[]+!+[]+!+[]]+[+!+[]+!+[]]是生命的意义。这就是人类可读语法的本质。我理解,我猜这是能给出的最准确的答案。尽管如此,我仍然觉得这是一种误导,因为认为。。。in
循环基于
in
运算符,并在
in
返回true的情况下执行。@BM:嗯,这两种用法都与属性有关,我认为没有太多的替代方法。无论如何,不可枚举的属性不被
枚举中的
枚举应该是很自然的。