2017-01-10 21 views
0

語句和操作者有一個在ECMA-262規範的說明:的JavaScript在

是需要的,[IN]語法參數,以避免與在操作者以用於迷惑在操作者在一個關係式聲明。

所以有什麼辦法讓

for (let i in x in y) { 
    console.log(i); 
} 

打印的東西嗎?

回答

2

括號將使解析更清楚:

for (let i in (x in y)) { 
    console.log(i); 
} 

但是,如果沒有他們,它實際上解析罰款。需要消除歧義的其他種類的for循環:

for (let a = b in c; false;); // does not parse 

for (let a = (b in c); false;); // parses fine 

您的代碼段不打印任何東西的原因是,x in y總是導致一個布爾值,因此它不會打印任何東西,除非你已經定義枚舉Boolean.prototypeObject.prototype的性質:

Boolean.prototype.foo = 'bar'; 
for (let a in ('' in {})) { 
    console.log(a); 
} // prints 'foo'