কিভাবে একটি জাভাস্ক্রিপ্ট ভেরিয়েবল আনসেট করতে?


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 বৈশিষ্ট কল "তৈরি হয় VariableEnvironment এই ব্যবহার ক্ষেত্রে একটি ফাংশন সঞ্চালনের প্রসঙ্গ হতে পারে -" যে বর্তমান সুযোগ সংযুক্ত varএকটি ফাংশন ভিতরে (যদিও এটা একটু বেশি জটিল পেতে হতে পারে আপনি যখন বিবেচনা করবেন let) বা "গ্লোবাল" কোডের ক্ষেত্রে ভেরিয়েবল এনভায়রনমেন্টটি বৈশ্বিক বস্তুর সাথে সংযুক্ত থাকে (প্রায়শই window)।

ভেরিয়েবল এনভায়রনমেন্ট-এ রেফারেন্সগুলি সাধারণত বিলোপযোগ্য নয় - ECMAScript 10.5-বিশদিত প্রক্রিয়াটি এটিকে বিশদভাবে ব্যাখ্যা করে তবে এটি যথেষ্ট বলে দেয় যে আপনার কোডটি একটি evalপ্রসঙ্গে (যা বেশিরভাগ ব্রাউজার-ভিত্তিক বিকাশ কনসোল ব্যবহার করে) কার্যকর না করা হয়, তারপরে ঘোষিত ভেরিয়েবলগুলি varনা দিয়ে ঘোষণা করা যায় মুছে ফেলা হবে।

2. ব্যবহার না করে var

varকীওয়ার্ডটি ব্যবহার না করে কোনও নাম নির্ধারণের চেষ্টা করার সময় , জাভাস্ক্রিপ্ট নামকরণের রেফারেন্সটি ECMAScript বিশেষকে " লেক্সিক্যাল এনভায়রনমেন্ট " বলে ডাকে এবং এটির প্রধান পার্থক্যটি লেক্সিক্যাল এনভায়রনমেন্টের নেস্টেড রয়েছে - এটি লেক্সিকাল এনভায়রনমেন্টের পিতামাতাকে ( কি নাম ECMAScript বৈশিষ্ট কল "বাইরের পরিবেশ রেফারেন্স") এবং যখন Javscript একটি রেফারেন্স সনাক্ত করতে ব্যর্থ LexicalEenvironment , এটা পিতা বা মাতা দেখায় LexicalEnvironment (হিসাবে বিস্তারিত 10.3.1 এবং 10.2.2.1 )। শীর্ষ স্তরের লেক্সিক্যাল এনভায়রনমেন্ট হ'ল " বৈশ্বিক পরিবেশ", এবং এটি বিশ্বব্যাপী অবজেক্টের সাথে আবদ্ধ যে এর রেফারেন্সগুলি বিশ্বব্যাপী অবজেক্টের বৈশিষ্ট্য So সুতরাং আপনি যদি এমন একটি নাম অ্যাক্সেস করার চেষ্টা varকরেন যা বর্তমান সুযোগ বা কোনও বাহ্যিক স্কোপগুলিতে কোনও কীওয়ার্ড ব্যবহার করে ঘোষিত হয়নি , জাভাস্ক্রিপ্ট অবশেষে একটি সম্পত্তি আনবে will এর windowঅবজেক্ট রেফারেন্স হিসেবে পরিবেশন করা। আমরা আগে শিখেছি করেছি হিসাবে, বস্তুর উপর বৈশিষ্ট্য মুছে ফেলা যাবে।

মন্তব্য

  1. এটি মনে রাখা জরুরী যে varঘোষণাগুলি "উত্তোলিত" - অর্থাত্ তারা সর্বদা যে ক্ষেত্রের মধ্যে রয়েছে তার শুরুতে ঘটেছিল বলে মনে করা হয় - যদিও কোনও varবিবৃতিতে সম্পন্ন মান সূচনা হয় না - এটি যেখানে রয়েছে সেখানে রেখে দেওয়া হয়েছে । সুতরাং নীচের কোডটিতেa , ভেরিয়েবল এনভায়রনমেন্টের একটি রেফারেন্স এবং windowসম্পত্তি নয় এবং কোডটির10 শেষে এটির মান হবে :

    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
আমি গুগল ক্রোম ভি 36 ব্যবহার করছি। আমি অন্যান্য ব্রাউজারে পরীক্ষা করেছি। দেখে মনে হচ্ছে এটি নিয়মিত ক্রস ব্রাউজারগুলি নয়। ক্রোম এবং অপেরা 1 প্রদর্শিত হয়েছিল, অন্যদিকে আমার কম্পিউটারে ফায়ারফক্স, সাফারি এবং আইই 11 একটি ত্রুটি দিয়েছে।
দাইং

3
ঠিক আছে, আমার ভুল দেখুন ecma-international.org/ecma-262/5.1/#sec-10.5 (যদিও হয়তো বিকাশকারী কনসোলে আমার পরীক্ষা চলছে, এটা সাধারণত "Eval প্রসঙ্গ" বলা হয়: (উপ-পয়েন্ট 2 এবং 8.c.ii) Chrome এ নেই), সুতরাং এটি ত্রুটি বাড়িয়ে তুলবে। আসল নথির বৈশ্বিক প্রসঙ্গে একই কোডটি 1সমস্ত ব্রাউজারে সঠিকভাবে আউটপুট দেয় । আসল নথিতে চলছে, আপনার কোডের উদাহরণগুলি সঠিক। আমি আপনার উত্তরটি সঠিক হিসাবে বেছে নিয়েছি, তবে আপনি ব্যাখ্যা window.a = 1; delete window.a;এবং সম্ভবত প্রক্রিয়াটি অন্তর্ভুক্ত করতে যদি এটি সম্পাদনা করতে পারেন তবে আমি এটির প্রশংসা করব । আপনার আপত্তি না থাকলে আমিও তাই করতে পারি।
গাস

2
@ ক্লেডারক্লাই হ্যাঁ ফাংশন সম্পাদিত হওয়ার সময় ফাংশন স্কোপড ভেরিয়েবলগুলি প্রতিবার তৈরি এবং ধ্বংস করা হয়। সম্ভবত বন্ধ হওয়া ব্যতিক্রম।
দাওং

278

@ স্কান লাইফের উত্তরগুলি কার্যকর হবে তবে প্রযুক্তিগতভাবে এটি হওয়া উচিত

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 !== windowvarযদিও আপনি সঠিক পরিস্থিতিতে থাকতে পারেন তবে ঘোষিত ভেরিয়েবলগুলি মুছতে আমি এখনও এটি ব্যবহার করব না।


14
সেই আকর্ষণীয় নিবন্ধটির লিঙ্কের জন্য @ জেডিয়েরিকবি ধন্যবাদ জানাই। এই অংশটির আরও নিখুঁতভাবে < পারফেকশন কিলস / বোঝাপড়া / ডিলিট/#misconferences> যেখানে লেখক বলেছেন যে নোহের বক্তব্য "মুছে ফেলা অপরিহার্য বলে মনে করা হয়" বরং এটি সঠিক নয় কেন এটি সঠিক নয়, একটি চমৎকার বিবর্ধনের পাশাপাশি ভুল । (মেসেঞ্জারটিকে গুলি করবেন না!)
রব ওয়েলস

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কোনও ভাষার মতো কিছু অদ্ভুত ব্যতিক্রম রয়েছে , আপনি যদি যথেষ্ট যত্ন নেন তবে আপনার পড়া উচিত:


সমস্ত বিবরণ সহ সম্পূর্ণ উত্তরের জন্য ধন্যবাদ। আমি এটির জন্য এটি চিহ্নিত করেছি, তবে আমি নোহের উত্তর গ্রহণ করেছি কারণ আমি বিশ্বাস করি যে একটি সাধারণ প্রশ্নাবলীর জন্য সমাপ্তি আরও গুরুত্বপূর্ণ। আবার - এই উত্তরে আপনি যে দুর্দান্ত কাজ করেছেন তার জন্য ধন্যবাদ।
22:53

30
some_var = null;

//or remove it..
delete some_var;

11
এই কোডের সুযোগটি যদি কোনও ফাংশন হয় তবে এটি কাজ করে না। সঠিক সমাধানের জন্য @ নোহের উত্তর দেখুন।
রোয়াতিন মার্থ

1
উত্তরের জন্য ধন্যবাদ, তবে আমি নোহের উত্তর গ্রহণ করেছি কারণ এটি এর ক্ষতিগুলি আরও ভালভাবে ব্যাখ্যা করে delete
22:38

3
কোনও উদ্বেগ নেই ... আমি একটি "দ্রুত এন নোংরা" সরল উত্তর দিয়েছি - @noah "অন্যান্য" মামলার সমস্ত বিবরণ যুক্ত করেছেন সুতরাং তিনিও creditণ প্রাপ্য। ;-)
স্কানলিফ

7
এটি সঠিক নয়। deleteশুধুমাত্র একটি সম্পত্তি জন্য কাজ করে। এটিকে nullভেরিয়েবল সেট করা এখনও বিদ্যমান।
ডেরেক 朕 會 功夫

1
আপনি সম্ভবত "যদি (কিছু_var) {..}" দিয়ে চেক করেন তবে সম্ভবত এই উত্তরটি যথেষ্ট যথেষ্ট
বিয়ারকোড

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 স্পেসের রেফারেন্স সহ আচ্ছাদিত রয়েছে - ভবিষ্যতে পোস্টের আগে বিদ্যমান উত্তরটি পর্যালোচনা করা কার্যকর হবে।
গাস

5
একমত। তবে সেখানে কেবল varমামলার উল্লেখ রয়েছে । আমার পক্ষে এটি পরীক্ষা করা এবং ভাগ করে নেওয়া letএবং constকেসগুলি আকর্ষণীয় ছিল । তবে, নোটের জন্য ধন্যবাদ। পরের বার আরও নির্দিষ্ট হওয়ার চেষ্টা করবে।
Serj.by

4

ECMAScript 2015 এ প্রতিবিম্বিত API দেয়। রিফ্লেক.ডিলিটপ্রোপার্টি () দিয়ে অবজেক্টের সম্পত্তি মুছে ফেলা সম্ভব :

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 লিখেছিল বুলিয়ান দেয়। এটি আপনাকে বলতে পারে মুছাটি সফল হয়েছিল কি না।

ক্রোমে পরীক্ষা করা হচ্ছে, বাদে সবকিছুই letমুছতে সক্ষম। যখন 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

এটি সর্বদা সঠিক নয়। বিশেষত ক্রোমে। ফায়ারফক্স সঠিকভাবে সবকিছু ফিরিয়ে দেয়। অন্য কোনও ব্রাউজারে পরীক্ষা হয়নি। হিসাবে letVars এবং constVars এটা সত্য ফিরে আসছে এটার মানে কি পরিবর্তনশীল মোছা উচিত কিন্তু এটা নয়। আপনি এটি ক্রোম এবং এফএফ উভয়ই যাচাই করতে পারেন। এফএফ ক্রোম না থাকা অবস্থায় সঠিক মান প্রত্যাবর্তন করছে। সুতরাং আপনি সত্যই এটির উপর নির্ভর করতে পারবেন তা নিশ্চিত করবেন না। দেখা যাক:let letVar = "1"; undefined delete letVar; true letVar "1" typeof letVar; "string" const constVar="1"; undefined delete constVar; true constVar; "1" typeof constVar; "string"
সার্জ.ব

1
নিচে উল্লিখিত jedierikb হিসাবে সেখানে kangax মাধ্যমে উপযুক্ত নিবন্ধ perfectionkills.com/understanding-delete বেশিরভাগ বর্ণনা কেন এবং কিভাবে deleteঅপারেটর কাজ করে। তবে এটি বর্ণনা করছে না কেন আক্ষরিক ক্রিয়াকলাপের সাথে oposite পরিস্থিতি। করুণা হিসাবে। যাইহোক, ভেরিয়েবল সম্পর্কিত জিনিসগুলি আরও বেশি পরিষ্কার হয়ে দেখা শুরু করে।
Serj.by

2

আপনি কোনও ভেরিয়েবল মুছে ফেলতে পারবেন না যদি আপনি প্রথম ব্যবহারের সময় এটির (var x; সহ) ঘোষণা করেন। তবে, যদি আপনার ভেরিয়েবল এক্স প্রথমে কোনও ডিক্লেয়ার ছাড়াই স্ক্রিপ্টে উপস্থিত হয়, আপনি মুছে ফেলা অপারেটরটি ব্যবহার করতে পারেন (x; মুছুন) এবং আপনার ভেরিয়েবল মুছে ফেলা হবে, যা অ্যারের কোনও উপাদান মুছতে বা কোনও সামগ্রীর সম্পত্তি মুছে ফেলার অনুরূপ similar ।


1

আমি কিছুটা বিভ্রান্ত যদি আপনি যে সমস্তটি চান সেটি হ'ল যদি কোনও ভেরিয়েবলের মান অন্য স্ক্রিপ্টে না পৌঁছে যায় তবে স্কোপ থেকে ভেরিয়েবলটি মুছতে হবে না। ভেরিয়েবলটি কেবল বাতিল করুন তারপর সুস্পষ্ট চেকটি যদি তা বাতিল হয় বা না হয়। সুযোগ থেকে ভেরিয়েবল মুছে ফেলার ঝামেলা কেন? এই সার্ভারটি বাতিল না করে কী করতে পারে?

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

প্রয়োজনটি হ'ল অর্ডার স্ক্রিপ্ট, যা আমার নিয়ন্ত্রণে নেই, ভেরিয়েবলটি দেখতে পাবে না - বিশেষত ওপি ক্ষেত্রে, টার্গেট স্ক্রিপ্টটির nullমানটির জন্য একটি আচরণ রয়েছে যা আমি ট্রিগার করতে চাই না।
গাস

এই প্রশ্নের উত্পাদনের সময় কোনও "ব্যাকএন্ড" অপব্যবহার করা হয়নি। এগুলি কেবলমাত্র একটি ওয়েবসাইটের বেশ কয়েকটি স্ক্রিপ্ট যেখানে এই স্ক্রিপ্ট বাদে আমার কোনও কিছুর নিয়ন্ত্রণ নেই।
Guss

উভয়ই একই ডকুমেন্টে বা পৃথক নথিতে স্ক্রিপ্ট যা অন্যজনকে লোড করতে বলে? আপনি অর্ডার স্ক্রিপ্ট এবং লক্ষ্য স্ক্রিপ্ট উল্লেখ করেছেন। যদি এটি কোনও ভেরিয়েবলের কোনও গিটার / পোস্ট ভেরিয়েবলের মাধ্যমে অন্য স্ক্রিপ্টে পাঠানো হয়, তবে কোনও জাভাস্ক্রিপ্ট এতে হাত দেওয়ার আগে আমি এটি ব্যাকএন্ডে মুছে ফেলব। পিএইচপি এ এর ​​একটি উদাহরণ কিছু হবে। <?php if(isset($_POST['somevariable']) unset($_POST['somevariable']); if(isset($_GET['somevariable']) unset($_GET['somevariable']); ?>
ডিজিঙ্গ্রামমে

আমি দেখি. ঠিক আছে যদি শূন্যতার জন্য চেক এবং ব্যালেন্স থাকে তবে লক্ষ্য স্ক্রিপ্টটিকে এটির মান নির্ধারণ করা কিছু যুক্তিযুক্ত বলে মনে হয় না তবে স্কোপ থেকে একটি ভেরিয়েবল মুছে ফেলা হয়, তবে আপনার উত্তরটি মনে হয়, তাই আমি ঘোড়াটি শুইয়ে দেব। আপনার প্রতিক্রিয়া জন্য ধন্যবাদ।
ডিজিঙ্গ্রামমে

একটি দ্রুত প্রশ্ন। কখনও কখনও এমন কোনও স্ক্রিপ্ট থাকবে যা আপনার নিজের নামে ডাকা হবে যা আপনার নিয়ন্ত্রণে থাকবে না তবে এখনও এই পরিবর্তনশীলটির প্রয়োজন হবে? যদি তা হয় তবে স্কোপ থেকে ভেরিয়েবল মুছে ফেলা একটি খারাপ ধারণা।
ডিজিঙ্গ্রামমে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.