जावास्क्रिप्ट चर को कैसे अनसेट करें?


591

मेरे पास जावास्क्रिप्ट में एक वैश्विक चर है (वास्तव में एक windowसंपत्ति है, लेकिन मुझे नहीं लगता कि यह मायने रखता है) जो पहले से ही एक पिछली स्क्रिप्ट से आबाद था लेकिन मैं एक और स्क्रिप्ट नहीं चाहता हूं जो बाद में इसके मूल्य को देखने के लिए चलेगा या यह भी था कि परिभाषित।

मैंने डाल दिया है some_var = undefinedऔर यह परीक्षण के उद्देश्य से काम करता है typeof some_var == "undefined"लेकिन मुझे नहीं लगता कि इसके बारे में जाने का यह सही तरीका है।

तुम क्या सोचते हो?

जवाबों:


453

deleteऑपरेटर एक वस्तु से एक संपत्ति को हटा। यह एक चर नहीं निकाल सकता है। तो सवाल का जवाब इस बात पर निर्भर करता है कि वैश्विक चर या संपत्ति कैसे परिभाषित की जाती है।

(1) यदि इसे बनाया जाता है var, तो इसे हटाया नहीं जा सकता।

उदाहरण के लिए:

var g_a = 1; //create with var, g_a is a variable 
delete g_a; //return false
console.log(g_a); //g_a is still 1

(२) यदि इसे बिना बनाया गया है var, तो इसे हटाया जा सकता है।

g_b = 1; //create without var, g_b is a property 
delete g_b; //return true
console.log(g_b); //error, g_b is not defined

तकनीकी व्याख्या

1. उपयोग करना var

इस मामले में संदर्भ g_aबनाया जाता है जिसमें ECMAScript कल्पना " वैरिएबल एंवायरमेंट " कहती है जो वर्तमान दायरे से जुड़ी होती है - यह फ़ंक्शन के varअंदर उपयोग करने के मामले में एक फ़ंक्शन निष्पादन संदर्भ हो सकता है (हालांकि यह थोड़ा अधिक जटिल हो सकता है जब आप विचार करते हैं let) या "वैश्विक" कोड के मामले में VariableEnvironment वैश्विक वस्तु (अक्सर window) से जुड़ा होता है ।

VariableEnvironment में संदर्भ सामान्य रूप से हटाने योग्य नहीं हैं - ECMAScript 10.5 में विस्तृत प्रक्रिया इस बारे में विस्तार से बताती है, लेकिन यह कहना पर्याप्त है कि जब तक कि आपके कोड को एक evalसंदर्भ में निष्पादित नहीं किया जाता है (जो कि अधिकांश ब्राउज़र-आधारित विकास कंसोल का उपयोग करते हैं), तब चर नहीं घोषित किए varजा सकते हैं। हटा दिया जाए।

2. बिना उपयोग के var

जब varकीवर्ड का उपयोग किए बिना किसी नाम पर मान निर्दिष्ट करने का प्रयास किया जाता है, तो जावास्क्रिप्टस्क्रिप्ट नामित संदर्भ का पता लगाने की कोशिश करता है, जिसमें ECMAScript कल्पना " LexicalEnvironment " कहती है , और मुख्य अंतर यह है कि LexicalEvironment s नेस्टेड हैं - कि एक LexicalEnvironment एक माता-पिता है ( ECMAScript कल्पना "बाहरी पर्यावरण संदर्भ" को क्या कहती है) और जब जावास्क्रिप्ट एक LexicalEenvironment में संदर्भ का पता लगाने में विफल रहता है , तो यह मूल LexicalEnvironment ( 10.3.1 और 10.2.2.1 में विस्तृत ) के रूप में दिखता है । शीर्ष स्तर का लेक्सिकल एनवायरमेंट " वैश्विक वातावरण " है", और यह वैश्विक वस्तु के लिए बाध्य है कि इसके संदर्भ वैश्विक वस्तु के गुण हैं। इसलिए यदि आप एक ऐसे नाम का उपयोग करने का प्रयास करते हैं varजो वर्तमान दायरे या किसी बाहरी दायरे में कीवर्ड का उपयोग करके घोषित नहीं किया गया था , तो जावास्क्रिप्ट आखिरकार एक संपत्ति लाएगा। windowउस संदर्भ के रूप में सेवा करने के लिए वस्तु। जैसा कि हमने पहले सीखा है, वस्तुओं पर गुण हटाए जा सकते हैं।

टिप्पणियाँ

  1. यह याद रखना महत्वपूर्ण है कि varघोषणाओं को "फहराया" जाता है - अर्थात उन्हें हमेशा उस दायरे की शुरुआत में हुआ माना जाता है जो वे हैं - हालांकि, वे मूल्य आरंभीकरण नहीं हैं जो एक varबयान में किया जा सकता है - कि जहां इसे छोड़ दिया गया है । तो निम्नलिखित कोड में, VariableEnvironmenta से एक संदर्भ है न कि संपत्ति और इसका मूल्य कोड के अंत में होगा:window10

    function test() { a = 5; var a = 10; }

  2. उपरोक्त चर्चा तब है जब "सख्त मोड" सक्षम नहीं है। "सख्त मोड" और लेक्सिकल संदर्भों का उपयोग करते समय लुकअप नियम थोड़े अलग हैं जो "सख्त मोड" के बिना विंडो गुणों को हल कर चुके होते हैं, "सख्त मोड" के तहत "अघोषित चर" त्रुटियों को बढ़ाएंगे। मुझे वास्तव में समझ नहीं आया कि यह कहाँ निर्दिष्ट है, लेकिन इसके ब्राउज़र कैसे व्यवहार करते हैं।


8
आपने जो कहा वह एक सामान्य गलत धारणा है लेकिन वास्तव में गलत है - जावास्क्रिप्ट में "वैश्विक चर" नहीं हैं। एक स्पष्ट दायरे के बिना परिभाषित चर (जैसे कि varएक फ़ंक्शन के बाहर का उपयोग करना) "वैश्विक ऑब्जेक्ट" के गुण हैं, जो वेब ब्राउज़र में है window। तो - var a = 1; delete window.a; console.log(a);सफलतापूर्वक चर को हटा देगा और संदर्भ त्रुटि जारी करने के लिए अंतिम पंक्ति का कारण होगा।
गस

7
@Guss, आपका कोड var a = 1; delete window.a; console.log(a);1. प्रदर्शित करता है
Dayong

5
मैं Google Chrome v36 का उपयोग कर रहा हूं। मैंने अन्य ब्राउज़रों पर परीक्षण किया। ऐसा लगता है कि यह लगातार क्रॉस ब्राउज़र नहीं है। क्रोम और ओपेरा ने 1 प्रदर्शित किया, जबकि मेरे कंप्यूटर पर फ़ायरफ़ॉक्स, सफारी और IE 11 ने एक त्रुटि दी।
Dayong

3
ठीक है, मेरी गलती। देखें ecma-international.org/ecma-262/5.1/#sec-10.5 (हालांकि शायद जब डेवलपर कंसोल में अपने परीक्षण चल रहा है, यह आम तौर पर "eval संदर्भ" माना जाता है: (उप-अंक 2 और 8.c.ii) Chrome में नहीं), इसलिए यह एक त्रुटि देगा। एक वास्तविक दस्तावेज़ के वैश्विक संदर्भ में समान कोड 1सभी ब्राउज़रों में सही ढंग से आउटपुट करेगा । वास्तविक दस्तावेजों में चल रहा है, आपके कोड उदाहरण सही हैं। मैंने आपके उत्तर को सही के रूप में चुना है, लेकिन अगर आप इसे समझाने window.a = 1; delete window.a;और संभवतः तंत्र को शामिल करने के लिए संपादित कर सकते हैं तो मैं इसकी सराहना करूंगा । अगर आप बुरा न मानें तो मैं भी ऐसा कर सकता हूं।
Guss

2
@KlaiderKlai हां। फ़ंक्शन निष्पादित होने पर फंसे हुए स्कैब चर बनाए और नष्ट किए जाते हैं। संभवतः बंद करना एक अपवाद है।
दिनो

278

@ scunlife का जवाब काम करेगा, लेकिन तकनीकी रूप से यह होना चाहिए

delete window.some_var; 

जब लक्ष्य कोई ऑब्जेक्ट प्रॉपर्टी न हो, तो डिलीट को नो-ऑप माना जाता है। जैसे,

(function() {
   var foo = 123;
   delete foo; // wont do anything, foo is still 123
   var bar = { foo: 123 };
   delete bar.foo; // foo is gone
}());

लेकिन चूंकि वैश्विक चर वास्तव में विंडो ऑब्जेक्ट के सदस्य हैं, इसलिए यह काम करता है।

जब प्रोटोटाइप चेन शामिल होती है, तो डिलीट का उपयोग करना अधिक जटिल हो जाता है क्योंकि यह केवल लक्ष्य ऑब्जेक्ट से संपत्ति को हटाता है, न कि प्रोटोटाइप। जैसे,

function Foo() {}
Foo.prototype = { bar: 123 };
var foo = new Foo();
// foo.bar is 123
foo.bar = 456;
// foo.bar is now 456
delete foo.bar;
// foo.bar is 123 again.

तो सावधान रहें।

संपादित करें: मेरा उत्तर कुछ हद तक गलत है (अंत में "गलतफहमी" देखें)। लिंक सभी गैरी विवरणों की व्याख्या करता है, लेकिन सारांश यह है कि ब्राउज़रों के बीच बड़े अंतर हो सकते हैं और उस वस्तु पर निर्भर करता है जिससे आप हटा रहे हैं। delete object.somePropआम तौर पर जब तक सुरक्षित होना चाहिए object !== window। मैं अभी भी इसका उपयोग करने varके लिए सही परिस्थितियों में कर सकते हैं के साथ घोषित चर को नष्ट करने के लिए उपयोग नहीं करेंगे ।


14
उस दिलचस्प लेख के लिंक के लिए @jedierikb धन्यवाद। विशेष रूप से इस भाग के लिए < perfectionkills.com/understanding-delete/#misconception > उस लेख में जहां लेखक कहता है कि नूह का कथन "हटाना नहीं माना जाता है" बल्कि यह एक गलत अनुमान के साथ गलत है कि यह गलत क्यों है । (दूत को गोली मत मारो!)
रोब वेल्स

2
संशोधित उत्तर के अंतिम वाक्य के संबंध में, एकमात्र परिस्थिति जिसमें आप घोषित चर को हटा सकते हैं var, जब चर के साथ घोषित किया गया था eval
स्टीफन बोहर

1
में इस मामले स्थित हटाएं बयान बिल्कुल कुछ भी करने को प्रकट नहीं होता है। यहाँ क्या चल रहा है?
एंडरसन ग्रीन

@ एंडरसनग्रीन-डीक्लेड ग्लोबल वैरिएबल डोंडलेट फ्लैग के साथ बनाए गए हैं ताकि डिलीट न हो सकें। वह कोड बिल्कुल वैसा ही व्यवहार करता है जैसा कि अपेक्षित था।
रॉब

35

यदि आप स्पष्ट रूप से चर को बिना घोषित कर रहे हैं var, तो उचित तरीका उपयोग करना होगा delete foo

हालाँकि, इसे हटाने के बाद, यदि आप इसे एक ऑपरेशन में उपयोग करने का प्रयास करते हैं जैसे कि इसके अलावा एक ReferenceErrorको फेंक दिया जाएगा क्योंकि आप एक अघोषित, अपरिभाषित पहचानकर्ता के लिए एक स्ट्रिंग नहीं जोड़ सकते हैं। उदाहरण:

x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined

यह कुछ स्थितियों में इसे गलत, अशक्त या अपरिभाषित करने के लिए सुरक्षित हो सकता है, इसलिए इसे घोषित किया जाता है और इस प्रकार की त्रुटि नहीं होगी।

foo = false

ध्यान दें कि ECMAScript में null, false, undefined, 0, NaN, या ''सभी का मूल्यांकन होगा false। बस सुनिश्चित करें कि आप का उपयोग न कर !==ऑपरेटर लेकिन इसके बजाय !=जब बूलियन्स के लिए प्रकार की जाँच और तुम नहीं पहचान की जाँच करना चाहते हैं (इसलिए nullहोगा == falseऔर false == undefined)।

यह भी ध्यान दें कि deleteसंदर्भों को "डिलीट" नहीं करता है, लेकिन ऑब्जेक्ट पर सीधे गुण, उदाहरण के लिए:

bah = {}, foo = {}; bah.ref = foo;

delete bah.ref;
alert( [bah.ref, foo ] )
// ,[object Object] (it deleted the property but not the reference to the other object)

यदि आपने एक चर घोषित किया है तो varआप उसे हटा नहीं सकते हैं:

(function() {
    var x = 5;
    alert(delete x)
    // false
})();

राइनो में:

js> var x
js> delete x
false

न ही आप कुछ पूर्वनिर्धारित गुणों को हटा सकते हैं जैसे Math.PI:

js> delete Math.PI
false

deleteकिसी भी भाषा के साथ कुछ अजीब अपवाद हैं, यदि आप पर्याप्त देखभाल करते हैं तो आपको पढ़ना चाहिए:


सभी विवरणों के साथ पूर्ण उत्तर के लिए धन्यवाद। मैंने इसे इसके लिए चिह्नित किया, लेकिन मैंने नूह के उत्तर को स्वीकार कर लिया है क्योंकि मेरा मानना ​​है कि एक साधारण प्रश्न के लिए संक्षिप्तता अधिक महत्वपूर्ण है और फिर पूरा करना। फिर - इस जवाब पर आपने जो महान काम किया उसके लिए धन्यवाद।
Guss

30
some_var = null;

//or remove it..
delete some_var;

11
यह काम नहीं करता है यदि इस कोड का कार्य एक फ़ंक्शन है। सही समाधान के लिए @ नूह का उत्तर देखें।
रोहिणी मार्त

1
उत्तर के लिए धन्यवाद, लेकिन मैंने नूह के उत्तर को स्वीकार कर लिया है क्योंकि यह बेहतर तरीके से बताती है delete
Guss

3
कोई चिंता नहीं ... मैंने "त्वरित n गंदा" सरल उत्तर दिया - @ तो "" अन्य "मामलों के लिए सभी विवरण जोड़ दिए, इस प्रकार वह श्रेय के भी हकदार हैं।" ;-)
स्क्यूलिफ़े

7
यह सही नहीं है। deleteकेवल एक संपत्ति के लिए काम करता है। इसे सेट करना nullचर अभी भी मौजूद है।
डेरेक 會 功夫 ere

1
यह उत्तर सबसे अधिक संभावना मामले के लिए पर्याप्त है जहां आप "if (some_var) {..}" के साथ जांच करते हैं
BearCode

16

TLDR: सरल निर्धारित वेरिएबल (बिना var, let, const) के साथ हटाया जा सकता है delete। आप का उपयोग करते हैं var, let, const- वे न तो साथ हटाया नहीं जा सका deleteहै और न ही साथ Reflect.deleteProperty

क्रोम 55:

simpleVar = "1";
"1"
delete simpleVar;
true
simpleVar;
VM439:1 Uncaught ReferenceError: simpleVar is not defined
    at <anonymous>:1:1
(anonymous) @ VM439:1
var varVar = "1";
undefined
delete varVar;
false
varVar;
"1"
let letVar = "1";
undefined
delete letVar;
true
letVar;
"1"
const constVar="1";
undefined
delete constVar;
true
constVar;
"1"
Reflect.deleteProperty (window, "constVar");
true
constVar;
"1"
Reflect.deleteProperty (window, "varVar");
false
varVar;
"1"
Reflect.deleteProperty (window, "letVar");
true
letVar;
"1"

एफएफ नाइटली 53.0a1 समान व्यवहार दिखाता है।


आपका उत्तर तकनीकी रूप से सही है, इसलिए आपको एक बिंदु मिलता है, लेकिन आपने जो कुछ भी लिखा है वह चयनित उत्तर द्वारा बहुत अधिक विवरणों और संदर्भों के साथ ECMAScript चश्मे से कवर किया गया है - भविष्य में पोस्टिंग से पहले मौजूदा उत्तर की समीक्षा करना उपयोगी होगा।
Guss

5
माना। लेकिन वहाँ केवल varमामले का उल्लेख किया । मेरे लिए यह परीक्षण और साझा करने letऔर constमामलों के रूप में अच्छी तरह से दिलचस्प था । हालांकि, नोट के लिए धन्यवाद। अगली बार और अधिक विशिष्ट बनने की कोशिश करेंगे।
सर्जबी

4

ECMAScript 2015 रिफ्लेक्ट एपीआई प्रदान करता है। Reflect.deleteProperty () के साथ ऑब्जेक्ट प्रॉपर्टी को हटाना संभव है :

Reflect.deleteProperty(myObject, 'myProp');
// it is equivalent to:
delete myObject.myProp;
delete myObject['myProp'];

वैश्विक windowऑब्जेक्ट की संपत्ति को हटाने के लिए :

Reflect.deleteProperty(window, 'some_var');

कुछ मामलों में संपत्तियों को हटाया नहीं जा सकता है (जब संपत्ति कॉन्फ़िगर करने योग्य नहीं है) और फिर यह फ़ंक्शन वापस false(साथ ही साथ) ऑपरेटर हटा दें )। अन्य मामलों में रिटर्न true:

Object.defineProperty(window, 'some_var', {
    configurable: false,
    writable: true,
    enumerable: true,
    value: 'some_val'
});

var frozen = Object.freeze({ myProperty: 'myValue' });
var regular = { myProperty: 'myValue' };
var blank = {};

console.log(Reflect.deleteProperty(window, 'some_var')); // false
console.log(window.some_var); // some_var

console.log(Reflect.deleteProperty(frozen, 'myProperty')); // false
console.log(frozen.myProperty); // myValue

console.log(Reflect.deleteProperty(regular, 'myProperty')); // true
console.log(regular.myProperty); // undefined

console.log(Reflect.deleteProperty(blank, 'notExistingProperty')); // true
console.log(blank.notExistingProperty); // undefined

सख्त मोड में चलने पर deletePropertyफ़ंक्शन और deleteऑपरेटर के बीच अंतर होता है:

'use strict'

var frozen = Object.freeze({ myProperty: 'myValue' });

Reflect.deleteProperty(frozen, 'myProperty'); // false
delete frozen.myProperty;
// TypeError: property "myProperty" is non-configurable and can't be deleted

4

चर, सरल गुणों के विपरीत, विशेषता है [[विन्यास योग्य]] , जिसका अर्थ है कि हटाने वाले ऑपरेटर के माध्यम से एक चर को हटाने की असंभवता । हालांकि एक निष्पादन संदर्भ है जिस पर यह नियम प्रभावित नहीं करता है। यह है eval संदर्भ: वहाँ [[विन्यास]] विशेषता चर के लिए सेट नहीं है।


3

डिलीट ऑपरेटर किसी प्रॉपर्टी को किसी ऑब्जेक्ट से हटा देता है।

delete object.property
delete object['property']

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

प्रश्न के अनुसार आपको किसी एक अनुसरण की आवश्यकता है

delete some_var;
delete window.some_var;
delete window['some_var'];

3

सभी ने जो लिखा था, उसके अलावा उस पर भी ध्यान दें delete बूलियन रिटर्न। यह आपको बता सकता है कि डिलीट सफल रहा या नहीं।

क्रोम पर परीक्षण, को छोड़कर सब कुछ letdeleltable था। जब deleteलौटा trueतो वास्तव में उन्हें हटा दिया:

implicit_global = 1;
window.explicit_global = 1;
function_set = function() {};
function function_dec() { };
var declared_variable = 1;
let let_variable = 1;

delete delete implicit_global; // true, tested on Chrome 52
delete window.explicit_global; // true, tested on Chrome 52
delete function_set; // true, tested on Chrome 52
delete function_dec; // true, tested on Chrome 52
delete declared_variable; // true, tested on Chrome 52
delete let_variable; // false, tested on Chrome 78

यह हमेशा सही नहीं है। खासकर क्रोम में। फ़ायरफ़ॉक्स सब कुछ सही ढंग से देता है। किसी अन्य ब्राउज़र में परीक्षण नहीं किया। जैसा कि letvar और constvars के लिए होता है, यह सच है कि इसका मतलब यह होना चाहिए कि वेरिएबल डिलीट हो गया है लेकिन ऐसा नहीं है। आप इसे क्रोम और एफएफ दोनों में देख सकते हैं। FF सही मान देता है जबकि Chrome नहीं है। इसलिए सुनिश्चित न करें कि आप वास्तव में इस पर भरोसा कर सकते हैं। चलो देखते हैं:let letVar = "1"; undefined delete letVar; true letVar "1" typeof letVar; "string" const constVar="1"; undefined delete constVar; true constVar; "1" typeof constVar; "string"
Serj.by

1
जैसा कि नीचे उल्लेख किया गया है कि jedierikb kangax perfectionkills.com/understanding-delete द्वारा एकदम सही लेख है जिसमें ज्यादातर वर्णन है कि deleteऑपरेटर क्यों और कैसे काम करता है। लेकिन यह वर्णन नहीं कर रहा है कि कार्यों के साथ शाब्दिक रूप से oposite स्थिति क्यों है। एक दया के रूप में। हालाँकि, चर के बारे में चीजें बहुत अधिक स्पष्ट होने लगती हैं।
सर्जबी

2

यदि आपने इसे पहले उपयोग के समय घोषित किया है, तो आप एक चर को नहीं हटा सकते। हालाँकि, अगर आपका वेरिएबल x पहली बार बिना किसी घोषणा के स्क्रिप्ट में दिखाई दिया, तो आप डिलीट ऑपरेटर (डिलीट x) का उपयोग कर सकते हैं और आपका वेरिएबल डिलीट हो जाएगा, जो किसी ऐरे के तत्व को हटाने या किसी ऑब्जेक्ट की प्रॉपर्टी को हटाने के समान है। ।


1

मैं थोड़ा उलझन में हूं। यदि आप चाहते हैं कि एक वैरिएबल वैल्यू दूसरी स्क्रिप्ट में न जाए, तो वेरिएबल को स्कोप से डिलीट करने की कोई जरूरत नहीं है। बस चर को स्पष्ट रूप से जाँचें कि यह शून्य है या नहीं। वेरिएबल को स्कोप से हटाने की परेशानी से क्यों गुजरना पड़ता है? इस सर्वर का क्या उद्देश्य है जो अशक्त नहीं कर सकता है?

foo = null;
if(foo === null) or if(foo !== null)

आवश्यकता यह है कि ऑर्डर स्क्रिप्ट, जो मेरे नियंत्रण में नहीं है, यह नहीं देखेगा कि चर मौजूद है - विशेष रूप से ओपी मामले के लिए, लक्ष्य स्क्रिप्ट में उस nullमूल्य के लिए एक व्यवहार है जिसे मैं ट्रिगर नहीं करना चाहता।
गेस

इस प्रश्न के उत्पादन के दौरान कोई "बैकएंड" का दुरुपयोग नहीं किया गया था। ये सिर्फ एक वेबसाइट पर कुछ स्क्रिप्ट हैं जहां मुझे इस एक स्क्रिप्ट के अलावा किसी भी चीज़ का कोई नियंत्रण नहीं है।
गेस

क्या दोनों स्क्रिप्ट एक ही दस्तावेज़ में या अलग-अलग दस्तावेज़ों में हैं कि एक दूसरे को लोड करने के लिए कहता है? आपने ऑर्डर स्क्रिप्ट और लक्ष्य स्क्रिप्ट का उल्लेख किया। यदि यह एक वैरिएबल की बात है जो किसी स्क्रिप्ट को गेट / पोस्ट वेरिएबल के माध्यम से पास किया जा रहा है, तो मैं बैकएंड पर किसी भी जावास्क्रिप्ट को उस पर अपना हाथ आने से पहले हटा दूंगा। Php में इसका उदाहरण कुछ इस तरह होगा। <?php if(isset($_POST['somevariable']) unset($_POST['somevariable']); if(isset($_GET['somevariable']) unset($_GET['somevariable']); ?>
designdrumm

समझा। ठीक है अगर अशक्त के लिए जाँच और शेष है, तो इसे एक मूल्य पर सेट करें स्क्रिप्ट लक्ष्य के साथ कुछ भी नहीं करेगा और अधिक तार्किक लगता है फिर एक चर को दायरे से हटा दिया जाता है, लेकिन आप अपना उत्तर देना चाहते हैं, इसलिए मैं घोड़े को लेटने देता हूँ। आपकी प्रतिक्रियाओं के लिए धन्यवाद।
डिसिजंड्रम

एक त्वरित प्रश्न। क्या कभी कोई ऐसी स्क्रिप्ट होगी जो आपके नाम से पुकारी जाती है जो आपके नियंत्रण में नहीं होगी लेकिन फिर भी इस चर की आवश्यकता होगी? यदि ऐसा है, तो चर को दायरे से हटाना एक बुरा विचार है।
designdrumm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.