क्योंकि {a : 1}
एक घोषणा है और यह ==
द्वारा पालन तथापि
({ a : 1 })
अभिव्यक्ति है और द्वारा ==
यह मूलतः नियम व्याकरण में परिभाषित किया गया है का पालन किया जाना करने की अनुमति है होना करने के लिए अनुमति नहीं है।
हालांकि ध्यान दें कि ({ a: 1} == { a: 1})
मान्य है। तो समानता अभिव्यक्ति मान्य है।
इसका मतलब है कि {a : 1} == { a : 1 }
बस वैध कथन मान्य नहीं है।
12.4 of the ES5.1 spec कहते
नोट एक ExpressionStatement एक खोलने घुंघराले ब्रेस के साथ शुरू नहीं कर सकते क्योंकि यह है कि यह एक ब्लॉक के साथ अस्पष्ट बना सकता है। साथ ही, एक अभिव्यक्ति स्टेटमेंट फ़ंक्शन कीवर्ड से प्रारंभ नहीं हो सकता है क्योंकि इससे फ़ंक्शनक्लेक्शनेशन के साथ संदिग्ध हो सकता है।
एक sidenote के रूप आपको लगता है कि
({a : 1}) != {a : 1}
क्योंकि वे बयान के एक ब्लॉक, के रूप में नहीं शुरू करने के रूप में दो नई वस्तुओं
क्या आप निश्चित हैं? मैं उम्मीद करता हूं कि '! ==' असफल हो लेकिन '! =' – spraff
@spraff: हाँ, वह निश्चित है। –