2014-09-01 10 views
5

तो सवाल यह है कि दो ही वस्तुओं जावास्क्रिप्ट में बराबर नहीं हैं, मान लें:क्यों ऑब्जेक्ट()! = ऑब्जेक्ट() जावास्क्रिप्ट में?

Object() == Object() 

या यहाँ तक कि:

[{a: 1}, {a: 2}].indexOf({a: 1}); //returns -1 not found 

इस अजीब व्यवहार का क्या कारण है?

+2

उन वे निश्चित रूप से ही नहीं हैं इसी तरह के दो वस्तुओं रहे हैं,। – Musa

+1

शायद यह मदद करता है: http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects/16788517 – John

+0

@Musa कोई और सुराग? –

उत्तर

8

ऑब्जेक्ट्स की तुलना संदर्भ से की जाती है। और दो संदर्भ केवल तभी बराबर होते हैं जब वे एक ही वस्तु को इंगित करते हैं।

+0

क्या यह सही व्यवहार है? क्या हमारे पास पाइथन जैसी अन्य भाषाओं में समान व्यवहार है? –

+2

@AfshinMehrabani हाँ। पायथन में 'द" है "ऑपरेटर परीक्षण ऑब्जेक्ट की पहचान करता है। पायथन परीक्षण करता है कि दोनों वास्तव में एक ही वस्तु हैं (यानी, स्मृति में एक ही पते पर रहते हैं)।' – doniyor

+0

भ्रम को रोकने के लिए: जेएस में आप 'ऑब्जेक्ट.आईएस' पर ठोकर खा सकते हैं, जो वस्तुओं पर पहचान के लिए भी परीक्षण करेगा, केवल सख्त, और' === 'जैसे टूटा नहीं होगा ... –

2

ऑब्जेक्ट्स संदर्भ हैं और जब आप दो संदर्भों की तुलना करते हैं तो वे झूठी वापसी करते हैं।

other answer (ईमॉन Nerbonne द्वारा दिए गए) यहाँ है एक बहुत ही प्रासंगिक बिंदु:

वस्तुओं बराबर माना जाता है जब

  • वे प्रति बिल्कुल बराबर === (स्ट्रिंग और संख्या unwrapped करने के लिए पहले कर रहे हैं सुनिश्चित करें कि 42Number(42) के समतुल्य है)
  • या वे दोनों तिथियां हैं और एक ही valueOf()
  • है
  • या वे एक ही प्रकार के दोनों और नहीं अशक्त कर रहे हैं और ...
    • वे वस्तुओं नहीं हैं और प्रति बराबर हैं == (कैच संख्या/तार/बूलियन्स)
    • या, undefined मूल्य के साथ अनदेखी गुण वे वही गुण हैं जिनमें से सभी को समवर्ती समकक्ष समझा जाता है।
1

एक ही सरणी के लिए लागू होता है ([] === []) //returns false

और NaN जो अपने आप को कभी नहीं के बराबर है और साथ ही एक विशेष मूल्य है।

NaN === NaN //False

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