प्रश्न: क्या जावास्क्रिप्ट में समानता या पहचान का मूल्यांकन करते समय ऑपरेंड ऑर्डर कोई अंतर करता है?क्या जावास्क्रिप्ट में समानता या पहचान का मूल्यांकन करते समय ऑपरेंड ऑर्डर कोई अंतर करता है?
कोड में (0 == value)
(value == 0)
से तेज़ या अधिक सही है? (ध्यान दें कि यह प्रश्न पहचान ऑपरेटर, ===
के लिए समान रूप से मान्य है।)
चूंकि समानता और पहचान ऑपरेटर दोनों कम्यूटिव हैं, मुझे विश्वास नहीं है कि ऑपरेंड ऑर्डर को मूल्यांकन प्रदर्शन में अंतर करना चाहिए, जब तक कि कुछ अंतर्निहित न हो समानता एल्गोरिदम की गणना में बाईं ओर शाब्दिक लाभ। एकमात्र कारण मुझे आश्चर्य है कि मैं हाल ही में गूगल के Closure Compiler इस्तेमाल किया कुछ जावास्क्रिप्ट नीचे उबालने के लिए, और पाया है कि
if (array.length == 0 && typeof length === 'number') {
if(0 == b.length && "number" === typeof c) {
को संकलित किया गया था।
दोनों समानता अभिव्यक्तियों में - एक ढीला और एक सख्त-क्लोजर ने मेरे ऑपरेटरों के आदेश को उलट दिया है, जिसमें संख्यात्मक अक्षर और उनके संबंधित अभिव्यक्तियों के बाईं ओर एक स्ट्रिंग अक्षर दिया गया है।
इससे मुझे उत्सुकता मिली।
मैं ECMAScript 5.1 Language Specification (खंड 11.9, पीपी। 80-82) और पाया, जबकि समानता एल्गोरिदम पहले बाएं हाथ ऑपरेंड का परीक्षण करके शुरू करते हैं, कोई संकेत नहीं है कि यह है कि यह तेज है या की समानता ऑपरेटर्स अनुभाग पढ़ते समय उस ऑपरेंड के रूप में एक शाब्दिक उपयोग करने के लिए बेहतर है।
क्या ईसीएमएस्क्रिप्ट की टाइप-जांच के बारे में कुछ है जो साक्षरता की परीक्षा को इष्टतम बनाता है? क्या यह क्लोजर कंपाइलर में कुछ ऑप्टिमाइज़ेशन क्विर्क हो सकता है? या शायद ईसीएमएस्क्रिप्ट की समानता एल्गोरिदम के पुराने संस्करण में एक कार्यान्वयन विस्तार जिसे spec के इस नए संस्करण में निरस्त कर दिया गया है?
मुझे लगता है यह "त्रुटि" कैसे गूगल पारसर्स का एक पक्ष प्रभाव के रूप में आता है और अपने कोड पुनर्निर्माण और दुष्प्रभाव या का सही सत्ता के साथ कोई संबंध नहीं है फेंक होगा ऑपरेंड ऑर्डर – Raynos
गति की जांच करने के लिए, बस [जेएस पेर्फ] (http://jsperf.com) पर परीक्षण चलाएं। यह निश्चित रूप से, केवल सैद्धांतिक/'उद्देश्य' मूल्यांकन की पेशकश करने के बजाए आपके द्वारा बनाए गए परीक्षण-मामलों को चलाने वाले ब्राउज़र को मापने के लिए होगा। –