मैं एक कोड उदाहरण पर ठोकर खाई, जो इस तुलना का उपयोग कर रहा था:
var someVar = 0;
Object.is(false, someVar); //Returns false
मुझे पता false == 0है trueकि यही कारण है कि हमारे पास है ===।
कैसे Object.isअलग है ===?
मैं एक कोड उदाहरण पर ठोकर खाई, जो इस तुलना का उपयोग कर रहा था:
var someVar = 0;
Object.is(false, someVar); //Returns false
मुझे पता false == 0है trueकि यही कारण है कि हमारे पास है ===।
कैसे Object.isअलग है ===?
जवाबों:
===जावास्क्रिप्ट में सख्त तुलना ऑपरेटर कहा जाता है। Object.isऔर सख्त तुलना ऑपरेटर बिल्कुल वैसा ही व्यवहार करता है, सिवाय NaNऔर +0/-0।
MDN से:
Object.is()विधि===ऑपरेटर के अनुसार समान होने के समान नहीं है ।===ऑपरेटर (और==साथ ही ऑपरेटर) संख्या मूल्यों -0 और +0 बराबर के रूप में व्यवहार करता है और व्यवहार करता हैNumber.NaNके रूप में करने के लिए बराबर नहींNaN।
नीचे दिए गए कोड में ===और के बीच अंतर पर प्रकाश डाला गया है Object.is()।
console.log(+0 === -0); //true
console.log(Object.is(+0, -0)); //false
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); //true
console.log(Number.NaN === Number.NaN); // false
console.log(Object.is(Number.NaN, Number.NaN)); // true
console.log(NaN === Number.NaN); // false
console.log(Object.is(NaN, Number.NaN)); // true

आप यहां और उदाहरण पा सकते हैं ।
नोट : Object.isECMAScript 6 प्रस्ताव का हिस्सा है और अभी तक व्यापक रूप से समर्थित नहीं है (उदाहरण के लिए यह किसी भी तरह के इंटरनेट एक्सप्लोरर या अन्य ब्राउज़रों के कई पुराने संस्करणों द्वारा समर्थित नहीं है)। हालाँकि आप गैर-ईएस 6 ब्राउज़रों के लिए एक पॉलीफ़िल का उपयोग कर सकते हैं जो ऊपर दिए गए लिंक में पाया जा सकता है।
.xString
document.createElement('div').isEqualNode(document.createElement('div')) === true
Object.isविनिर्देशन के सेमवैल्यू एल्गोरिथ्म=== का उपयोग करता है , जबकि स्ट्रिक्ट इक्वेलिटी एल्गोरिथम का उपयोग करता है । सख्त समानता एल्गोरिथ्म पर एक नोट अंतर को बुलाता है:
यह एल्गोरिथ्म हस्ताक्षरित शून्य और NaNs के उपचार में सेमवैलू एल्गोरिथम ... से भिन्न होता है।
ध्यान दें कि:
NaN === NaNगलत है, लेकिन Object.is(NaN, NaN)सच है+0 === -0सच है, लेकिन Object.is(+0, -0)गलत है-0 === +0सच है, लेकिन Object.is(-0, +0)गलत हैजावास्क्रिप्ट में कम से कम चार प्रकार की "समानता" है:
==), जहां ऑपरेंड को मैच करने के लिए प्रयास करने के लिए मजबूर किया जाएगा। नियम स्पष्ट रूप से निर्दिष्ट हैं , लेकिन गैर-स्पष्ट हैं। ( "" == 0है true, "true" == trueहै false, ...)।===), जहां अलग-अलग प्रकारों के ऑपरेंड को ज़ब्त नहीं किया जाएगा (और बराबर नहीं होगा), लेकिन नोट के बारे में NaNसकारात्मक और नकारात्मक शून्य देखें।Object.is)।SameValueको छोड़कर +0और -0एक ही के बजाय अलग हैं (द्वारा प्रयोग किया जाता Mapचाबी के लिए, और से Array.prototype.includes)।ऑब्जेक्ट समतुल्यता भी है , जो भाषा या रनटाइम द्वारा प्रदान नहीं की जाती है, लेकिन आमतौर पर इसके रूप में व्यक्त की जाती है: वस्तुओं में समान प्रोटोटाइप, समान गुण होते हैं, और उनकी संपत्ति का मान समान होता है ("उसी" की कुछ उचित परिभाषा द्वारा) )।
- यदि टाइप (x) टाइप (y) से अलग है, तो गलत लौटें।
- यदि टाइप (x) संख्या है, तो
- यदि x NaN है और y NaN है, तो सही लौटें।
- यदि x +0 है और y -0 है, तो गलत लौटें।
- यदि x -0 है और y +0 है, तो गलत लौटें।
- यदि x y के समान संख्या मान है, तो सही लौटें।
- विवरण झूठा है।
- सेमवैल्यूएनॉननंबर (x, y) वापस करें।
... जहां SameValueNonNumber है:
- मुखर: प्रकार (x) संख्या नहीं है।
- जोर: टाइप (x) टाइप (y) के समान है।
- यदि टाइप (x) अपरिभाषित है, तो सही लौटें।
- यदि टाइप (x) शून्य है, तो सही लौटें।
- यदि टाइप (x) स्ट्रिंग है, तो
- यदि x और y कोड इकाइयों (समान लंबाई और समान सूचकांकों पर समान कोड इकाइयाँ) के समान क्रम हैं, तो वापस लौटें; अन्यथा, झूठे लौटें।
- यदि टाइप (x) बूलियन है, तो
- यदि x और y दोनों सत्य हैं या दोनों असत्य हैं, तो सत्य लौटें; अन्यथा, झूठे लौटें।
- यदि Type (x) Symbol है, तो
- यदि x और y दोनों समान प्रतीक मान हैं, तो सही लौटें; अन्यथा, झूठे लौटें।
- यदि x और y समान ऑब्जेक्ट मान हैं, तो सही लौटें। नहीं तो झूठा लौट आता है।
- यदि टाइप (x) टाइप (y) से अलग है, तो गलत लौटें।
- यदि टाइप (x) संख्या है, तो
- यदि x NaN है, तो गलत लौटें।
- यदि y NaN है, तो गलत लौटें।
- यदि x y के समान संख्या मान है, तो सही लौटें।
- यदि x +0 है और y -0 है, तो सही लौटें।
- यदि x -0 है और y +0 है, तो सही लौटें।
- विवरण झूठा है।
- सेमवैल्यूएनॉननंबर (x, y) वापस करें।
Object.is = function(v1, v2){
//test for `-0`
if(v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
//test for `NaN`
if(v1 !== v1) {
return v2 !== v2;
}
//everything else
return v1 === v2;
}
उपरोक्त पॉलीफ़िल फ़ंक्शन यह दिखाने के लिए है कि कैसे Object.isकाम करता है, किसी के लिए भी जो जानने के इच्छुक हैं। यू-डोंट-नो-जेएस का संदर्भ
Object.is()समारोह तर्क के रूप में 2 मानों का उपयोग करके सच रिटर्न अगर 2 दिए गए मान ठीक उसी हैं, अन्यथा यह अवास्तविक लौटाते हैं।
आप सोच सकते हैं, हमारे पास पहले से ही ===ऑपरेटर के साथ जावास्क्रिप्ट में सख्त समानता (चेक प्रकार + मूल्य) की जाँच है , हमें इस फ़ंक्शन की आवश्यकता क्यों है? अच्छी तरह से सख्त समानता कुछ मामलों में पर्याप्त नहीं है और वे निम्नलिखित हैं:
console.log(NaN === NaN); // false
console.log(-0 === +0); // true
Object.is() इन मूल्यों की तुलना करने में सक्षम होने में हमारी मदद करता है कि क्या वे समान हैं, कुछ सख्त समानता ऑपरेटर नहीं कर सकते हैं।
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(-0, 0)); // false
console.log(Object.is(+0, +0)); // true
console.log(Object.is(+0, -0)); // false
संक्षेप में, वे समान हैं, लेकिन Object.isचालाक और अधिक सटीक हैं ...
आइए इसे देखें ...
+0 === -0 //true
लेकिन यह पूरी तरह से सही नहीं है क्योंकि यह अनदेखा -और +पहले ...
अब हम उपयोग करते हैं:
Object.is(+0, -0) //false
जैसा कि आप देखते हैं, यह तुलना करने के लिए अधिक सटीक है।
इसके अलावा NaN, सही होने की तरह अधिक काम करता है, जैसा कि कोई भी विचार NaNकरता है।