समानता ऑपरेटर पहले मामले में झूठी क्यों लौटता है?जावास्क्रिप्ट दिनांक तुलना
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(a == b); // <- returns false
alert(a.getTime() == b.getTime()); // returns true
क्यों?
समानता ऑपरेटर पहले मामले में झूठी क्यों लौटता है?जावास्क्रिप्ट दिनांक तुलना
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(a == b); // <- returns false
alert(a.getTime() == b.getTime()); // returns true
क्यों?
के बाद से दिनांक निर्मित वस्तुओं रहे हैं, और primitives नहीं, ऑब्जेक्ट संदर्भों का उपयोग करके समानता जांच की जाती है।
इस मामले में, a
और b
ऑब्जेक्ट एक ही ऑब्जेक्ट नहीं हैं, और इसलिए परीक्षण विफल हो जाता है।
आप
var a = new String("a");
var b = new String("a");
alert(a == b); //false
का उपयोग कर .getTime
का उपयोग कर या .valueOf
आप एक आदिम में वस्तुओं मूल्य परिवर्तित कर रहे हैं के द्वारा एक ही देख सकते हैं, और ये हमेशा मूल्य के बजाय संदर्भ से तुलना कर रहे हैं।
वहाँ भी इस मामले में इस
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(+a == +b); //true
करने के लिए एक अधिक अस्पष्ट तरीका है आप दो तिथियों के मूल्य की एक तुलना करना चाहते हैं तो एकल +
ऑपरेटर वस्तुओं valueOf
विधि कॉल करने जावास्क्रिप्ट इंजन बलों - और इसलिए यह दो प्राइमेटिव है जिनकी तुलना की जा रही है।
Compare two dates with JavaScript
dates.compare (क, ख)
तथ्य यह है कि दो वस्तुओं के बीच तुलना ठीक से काम नहीं करता है:/
वास्तव में नहीं। दो वस्तुओं के बीच तुलना निर्दिष्ट के रूप में काम करता है। –
यदि आप दो घड़ियां बनाते हैं, और उन्हें एक ही समय में सेट करते हैं, तो आपके पास दो घड़ियों हैं।
यदि आप एक घड़ी में समय बदलते हैं, तो यह दूसरी घड़ी में समय नहीं बदलेगा।
तिथियों की तुलना या क्रमबद्ध करने के लिए, दूसरे से एक घटाएं। गणितीय अभिव्यक्ति में उपयोग की जाने वाली दिनांक वस्तु का मान, इसका टाइमस्टैम्प है।
फ़ंक्शन तुलना दिनांक (ए, बी) {वापसी ए-बी};
मुझे खेद है दोस्तों, लेकिन यह मूर्खतापूर्ण है ... विशेष रूप से दो घड़ियों के बारे में थोड़ा सा।
==, परिभाषा के अनुसार VALUES की तुलना करता है, जबकि === तुलना संदर्भ। यह कहकर कि == गैर-प्राइमेटिव के लिए विफल रहता है भाषा की अपनी वाक्य रचनात्मक संरचना को तोड़ देता है। बेशक, === प्रारंभिक उदाहरण में विफल हो जाएगा, क्योंकि दो तिथियां स्पष्ट रूप से दो अलग-अलग मेमोरी-रिक्त स्थान पर दो अलग-अलग पॉइंटर्स हैं, लेकिन, जेएस स्पेक की परिभाषा के अनुसार, == को दो की तुलना के लिए सत्य वापस करना चाहिए तिथियां जिसका मूल्य समय में एक ही बिंदु है।
फिर भी एक और कारण मैं जे एस नफरत ...
शेख़ी करने के लिए क्षमा करें, लेकिन यह सिर्फ एक घंटे के लिए अपनी बट लात मारी।
एक तरफ के रूप में, आप मानों की तुलना को बल देने के लिए valueOf() का उपयोग कर सकते हैं, और यह सच हो जाएगा ... यह == के साथ अनावश्यक है लेकिन यह काम करता है।
सहमत हैं, ऐसे डब्ल्यूटीएफ – Art
आप नहीं जानते कि आप किस बारे में चिंतित हैं ... == और === के बीच भेद मूल्य बनाम रेफ के साथ कुछ भी नहीं करने के लिए, == बस बताता है कि वीएम को स्पष्ट रूप से परिभाषित कोरिंग नियमों का एक सेट उपयोग करना चाहिए जब दो ऑपरेंड विभिन्न प्रकार के होते हैं, जबकि === कहता है कि ऐसा कोई दबाव नहीं होता है। –
यह एक दिलचस्प हैक है, धन्यवाद! – Art
यकीन नहीं है कि मैं इसे वास्तव में एक हैक कहूंगा। –
बस यह सुनिश्चित करने के लिए - मैं "+ a == + b" कथन का जिक्र कर रहा था। – Art