2017-02-18 6 views
6

मैं (एक बार एक jQuery स्क्रिप्ट लोड किया गया है) मेरे कंसोल में निम्नलिखित लाइनों को चलाने की है, और निम्न परिणाम प्राप्त किया:

$(this) 
> [Window] 
$(this) != $(this) 
> true 
$(this) == $(this) 
> false 
$(this) === $(this) 
> false 

और मैं नहीं जानता कि क्या क्या चल रहा है यह पता लगाने की लेने के लिए कदम पर। मेरा अनुमान है कि कुछ ऐसी वस्तु है जिसमें समय-समय पर मूल्य होता है जो बदल रहा है, लेकिन मुझे आश्चर्य है कि यह कुछ अलग है या नहीं। मैं इस दौरान मूल्यों की तुलना करने की कोशिश करूंगा, लेकिन मुझे उम्मीद थी कि कोई समझ सकता है कि यहां क्या हो रहा है।

इस बिंदु को संबोधित करने के लिए संपादित किया गया कि मुझे $ (तर्क) के अंतर्निहित कार्यान्वयन से अनजान था। मुझे नहीं पता था कि यह एक नया संदर्भ वस्तु लौटा दी है। इसलिए, मुझे विश्वास नहीं है कि यह दो जावास्क्रिप्ट ऑब्जेक्ट्स के लिए समानता निर्धारित करने का एक डुप्लिकेट है? "।

+0

http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects – j08691

+1

_ "मैं इस दौरान मानों की तुलना करने की कोशिश करूंगा" _ आप क्या कर रहे हैं निर्धारित? – guest271314

+1

@ guest271314 यह देखने के लिए तुलना करें कि सभी गुण मूल्य के बराबर हैं या नहीं। अब मैं देखता हूं कि जावास्क्रिप्ट अकेले समानता के आधार पर मूल्यांकन करता है और यह कि $ (यह) हर बार इसे एक नया संदर्भ देता है। इसलिए, बाओ, मुझे नहीं लगता कि यह एक डुप्लिकेट है। मुझे पता नहीं था कि $ (इस) ने प्रत्येक बार "इस" पर एक नया संदर्भ वस्तु वापस कर दी है, और यह आपके लिंक किए गए प्रश्न में संबोधित नहीं है। – NicholasFolk

उत्तर

6

$() का उपयोग कर jQuery का एक उदाहरण देता है। तो, आप this के साथ एक उदाहरण बनाते हैं, और this का एक और उदाहरण, आपके पास दो अलग-अलग उदाहरण हैं। भले ही वे this पर समान संदर्भ साझा करते हैं, उदाहरण समान नहीं हैं, और जिनकी तुलना की जा रही है।


यह एक दृश्य उदाहरण रखने में मदद कर सकता है, और चीजों को थोड़ा और स्पष्ट कर सकता है। jQuery एक वर्ग की तरह काम करता है। तो चलो जहां उदाहरण की खातिर, समारोह $() मौजूद नहीं है एक बहुत ही सरल उदाहरण का उपयोग करते हैं:

class jQuery { 
    constructor(element) { 
     this.element = element; 
    } 
} 

var obj1 = new jQuery(this); 
var obj2 = new jQuery(this); 

console.log(obj1 === obj2); // false 

उन दोनों में ठीक उसी तर्क (this) का उपयोग कर रहे एक नया "jQuery" वस्तु बनाने के लिए। लेकिन, एक बार फिर, obj1 obj2 की तुलना में एक पूरी तरह से अलग उदाहरण है। वे दोनों स्मृति में अपनी अनूठी जगह है।

+3

+1 - इसके अलावा, यदि आप मानों की तुलना करना चाहते हैं, तो 'यह === यह' का उपयोग करें। स्पष्टीकरण के लिए, जब आप इसे '$() 'के साथ लपेटते हैं, तो एक [jQuery ऑब्जेक्ट] (https://learn.jquery.com/using-jquery-core/jquery-object/) का एक उदाहरण लौटाया जाता है (आप चाहें अपने उत्तर में यह स्पष्ट करने के लिए)। –

+0

उत्तर के रूप में चिह्नित किया गया क्योंकि यह प्रश्न की जड़ को संबोधित करता है, जो अनिवार्य रूप से "$ (...) वापस करता है (या हुड के नीचे क्या करता है)?"। – NicholasFolk

+1

@ निकोलसफॉक, कमाल। मैं आगे भी गया और जोश क्रोजियर की टिप्पणी के कारण यह कैसे काम करता है इसका एक और दृश्य उदाहरण जोड़ा। – KevBot

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