2015-03-27 3 views

उत्तर

5

यह section 11.14 "कॉमा ऑपरेटर (,)" में समझाया गया है:

Comma Operator ECMA Spec

*NoIn उसी संरचना, कि शामिल नहीं को छोड़कर है in कीवर्ड का उपयोग करते हैं, खंड 11.8 "रिलेशनल ऑपरेटर्स" :

Relational Operators ECMA Spec

कल्पना का कहना है:

in ऑपरेटर को ऑपरेटर के साथ for कथन में एक संबंधपरक अभिव्यक्ति में भ्रमित करने से बचने के लिए "नोइन" संस्करणों की आवश्यकता है।

for (var x in foo) { ... } 

या::

if ('x' in foo) { ... } 

"NoIn" वेरिएंट वहाँ यह असंभव ऊपर in के दूसरे संस्करण का उपयोग करने के बनाने के लिए कर रहे हैं

in के रूप में दो तरह से इस्तेमाल किया जा सकता for लूप की पहली अभिव्यक्ति में। इसलिए, निम्न कोड अमान्य है:

for (y = 'x' in foo; y; y = false) { ... } 
+0

ठीक है, मैंने इसे 4 बार पढ़ा है और यह समझ में आता है। यह घना और गहरी चीजें है। –

+0

यह क्लिक किया गया है। धन्यवाद :) –

1

ExpressionNoIn एक गैर टर्मिनल है जिसमें से सभी अभिव्यक्तियां प्राप्त की जा सकती हैं, in ऑपरेशन (यानी 'prop' in obj) की अपेक्षा करें।

नीचे से पालन A3 (जहां ExpressionNoIn परिभाषित किया गया है) पहली *NoIn गैर टर्मिनल जो एक (भिन्न) शामिल नहीं है करने के लिए *NoIn गैर टर्मिनल अब:

RelationalExpression : 
    ShiftExpression 
    RelationalExpression < ShiftExpression 
    RelationalExpression > ShiftExpression 
    RelationalExpression <= ShiftExpression 
    RelationalExpression >= ShiftExpression 
    RelationalExpression instanceof ShiftExpression 
    RelationalExpression in ShiftExpression 

RelationalExpressionNoIn : 
    ShiftExpression 
    RelationalExpressionNoIn < ShiftExpression 
    RelationalExpressionNoIn > ShiftExpression 
    RelationalExpressionNoIn <= ShiftExpression 
    RelationalExpressionNoIn >= ShiftExpression 
    RelationalExpressionNoIn instanceof ShiftExpression 

मुझे लगता है कि यह करने के लिए आसान बना देता है for/in loops से loops को अलग करें।

संबंधित मुद्दे