क्या (a== 1 && a ==2 && a==3) जावास्क्रिप्ट में कभी सत्य हो सकता है?
यह हैरान करने वाला साक्षात्कार प्रश्न जावास्क्रिप्ट के समानता ऑपरेटर (==) की समझ को चुनौती देता है। प्रश्न पूछता है कि क्या अभिव्यक्ति (a== 1 && a ==2 && a==3) का मूल्यांकन सत्य पर करना संभव है।
पहली नज़र में, यह असंभव लगता है, क्योंकि a तीन के बराबर नहीं हो सकता एक साथ अलग-अलग मूल्य। हालाँकि, एक चतुर चाल जावास्क्रिप्ट के == ऑपरेटर की निंदनीय प्रकृति का फायदा उठाती है।
जावास्क्रिप्ट में, == प्रकार का ज़बरदस्ती करता है, जो अप्रत्याशित मूल्य तुलना की अनुमति देता है। किसी ऑब्जेक्ट को कस्टम toString() या valueOf() फ़ंक्शन के साथ परिभाषित करके, कोई ऑब्जेक्ट की तुलना किसी संख्या से करने पर लौटाए गए मान में हेरफेर कर सकता है।
उदाहरण के लिए, निम्नलिखित कोड पर विचार करें:
const a = {
i: 1,
toString: function () {
return a.i ;
}
};
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
यहां, ऑब्जेक्ट ए में एक संपत्ति है जिसे मैंने 1 से आरंभ किया है। इसके toString() फ़ंक्शन को i को बढ़ाने और उसके मूल्य को वापस करने के लिए परिभाषित किया गया है, प्रत्येक तुलना के साथ ऑब्जेक्ट के प्रतिनिधित्व को प्रभावी ढंग से बदलता है।
जब a की तुलना पहली बार 1 से की जाती है, तो i को बढ़ाकर 2 कर दिया जाता है। दूसरी तुलना में, समानता की शर्त को पूरा करते हुए, i को फिर से 3 तक बढ़ा दिया जाता है। अंत में, तीसरी तुलना में, i को 4 तक बढ़ा दिया गया है, लेकिन टाइप कॉर्सन इसे वापस 3 में बदल देता है, जिसके परिणामस्वरूप एक मैच होता है।
इस प्रकार, जावास्क्रिप्ट के लचीले समानता ऑपरेटर का लाभ उठाकर और एक कस्टम ऑब्जेक्ट को परिभाषित करके, यह अभिव्यक्ति (a== 1 && a ==2 && a==3) को संतुष्ट करना वास्तव में संभव है, जिससे इसका मूल्यांकन सत्य हो जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3