भेद की गहराई में जाना: क्या जावास्क्रिप्ट में eval() और new Function() विनिमेय हैं?
अक्सर जावास्क्रिप्ट में, हमें ऐसे फ़ंक्शन मिलते हैं eval() और नया फ़ंक्शन()। हालाँकि उनका वाक्य-विन्यास पहली नज़र में समान लग सकता है, लेकिन बारीकी से जांच करने पर उनके व्यवहार में बुनियादी अंतर का पता चलता है। वापसी eval('('स्ट्रिंग')'); } var func = फ़ंक्शन(स्ट्रिंग) { वापसी (नया फ़ंक्शन ('वापसी (' स्ट्रिंग ')' )()); } कंसोल.लॉग(मूल्यांकन('2 1')); console.log(func('2 1'));
क्या ये दोनों कार्य अपने संचालन में समान हैं? आम धारणा के विपरीत, वे नहीं हैं।
var evaluate = function(string) { return eval('(' string ')'); } var func = function(string) { return (new Function( 'return (' string ')' )()); } console.log(evaluate('2 1')); console.log(func('2 1'));eval() बनाम new Function()
eval()
: व्याख्या करता है वर्तमान निष्पादन दायरे में जावास्क्रिप्ट अभिव्यक्ति के रूप में एक स्ट्रिंग। इसमें स्थानीय चर तक पहुंचने की क्षमता है।इस उदाहरण में, eval() test1() फ़ंक्शन के भीतर स्थानीय चर 'a' को संशोधित करता है, जिसके परिणामस्वरूप 22 का अलर्ट मिलता है। हालाँकि, यदि हमें new Function('return (a =) का उपयोग करना होता है 22);')(), स्थानीय चर 'ए' अपरिवर्तित रहेगा।
var evaluate = function(string) { return eval('(' string ')'); } var func = function(string) { return (new Function( 'return (' string ')' )()); } console.log(evaluate('2 1')); console.log(func('2 1'));निहितार्थ और सावधानियां
जबकि eval() और new Function() दोनों अपने उद्देश्यों को पूरा करते हैं, यह ध्यान रखना महत्वपूर्ण है कि eval() में अंतर्निहित सुरक्षा जोखिम होते हैं। स्थानीय चरों तक पहुंचने और संभावित रूप से वैश्विक दायरे को संशोधित करने की इसकी क्षमता से अनपेक्षित परिणाम हो सकते हैं।परिणामस्वरूप, आमतौर पर eval() का उपयोग करने से बचने की सलाह दी जाती है जब तक कि बिल्कुल आवश्यक न हो। eval() में भेजा गया अविश्वसनीय डेटा आपके एप्लिकेशन की सुरक्षा से समझौता कर सकता है। इसी तरह, अविश्वसनीय इनपुट को संभालते समय नए फ़ंक्शन() को सावधानी से नियोजित किया जाना चाहिए।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3