"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या जावास्क्रिप्ट में `eval()` और `new Function()` वास्तव में विनिमेय हैं?

क्या जावास्क्रिप्ट में `eval()` और `new Function()` वास्तव में विनिमेय हैं?

2024-11-20 को प्रकाशित
ब्राउज़ करें:401

Are `eval()` and `new Function()` Truly Interchangeable in JavaScript?

भेद की गहराई में जाना: क्या जावास्क्रिप्ट में 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()

: व्याख्या करता है वर्तमान निष्पादन दायरे में जावास्क्रिप्ट अभिव्यक्ति के रूप में एक स्ट्रिंग। इसमें स्थानीय चर तक पहुंचने की क्षमता है।
  • new Function(): जावास्क्रिप्ट कोड वाली स्ट्रिंग से एक फ़ंक्शन ऑब्जेक्ट का निर्माण करता है। यह फ़ंक्शन एक अलग दायरे में चलता है, इसे स्थानीय चर से अलग किया जाता है।
  • इस अंतर को स्पष्ट करने के लिए, निम्नलिखित फ़ंक्शन पर विचार करें:
  • function test1() { वर ए = 11; eval('(a = 22)'); चेतावनी(ए); // अलर्ट 22 }

इस उदाहरण में, 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