আমি জাভাস্ক্রিপ্ট অনির্ধারিত ও নাল সম্পর্কে কিছুটা বিভ্রান্ত।
সম্পর্কে বিভ্রান্ত করবেন না null। এটি সাধারণত বোধগম্য হয় এবং অন্যান্য স্ক্রিপ্টিং ভাষার ধারণার বাইরে-ব্যান্ড 'নাল', 'নীল' বা 'কিছুই নয়' অবজেক্টগুলির অনুরূপ আচরণ করে।
undefinedঅন্যদিকে, এটি একটি অদ্ভুত জাভাস্ক্রিপ্ট স্পর্শকাতর। এটি একটি সিঙ্গলটন অবজেক্ট যা ব্যান্ড আউট-ব্যান্ডের মানগুলি উপস্থাপন করে, মূলত দ্বিতীয় সাদৃশ্য-তবে-ভিন্ন null। এটি উঠে আসে:
আপনি যখন functionবিবৃতি তালিকাগুলিতে যুক্তি তালিকার তুলনায় কম আর্গুমেন্টের সাথে কোনও ফাংশন কল করেন , আনপাস করা আর্গুমেন্টে সেট করা থাকে undefined। আপনি উদাহরণস্বরূপ এটির জন্য পরীক্ষা করতে পারেন:
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
এই পদ্ধতির সাহায্যে আপনি dosomething(1)এবং এর মধ্যে পার্থক্য বলতে পারবেন না dosomething(1, undefined); arg2উভয় একই মান হবে। আপনার যদি পার্থক্যটি বলতে হয় তবে আপনি দেখতে পারেন arguments.length, তবে optionচ্ছিক যুক্তিগুলি করা সাধারণত খুব পঠনযোগ্য নয়।
যখন একটি ফাংশন নেই return value;, এটি ফিরে আসে undefined। সাধারণত এই জাতীয় রিটার্নের ফলাফল ব্যবহার করার দরকার নেই।
আপনি যখন var aকোনও ব্লকে একটি বিবৃতি রেখে কোনও ভেরিয়েবল ঘোষণা করেন তবে এখনও এটির জন্য কোনও মান নির্ধারণ করেন নি, এটি undefined। আবার, আপনার সত্যিকারের কখনও তার উপর নির্ভর করার দরকার নেই।
স্পোকি typeofঅপারেটর ফিরে আসে 'undefined'যখন এর অপরেন্ড একটি সাধারণ ভেরিয়েবল থাকে যা অস্তিত্বহীন থাকে, সাধারণত কোনও ত্রুটি নিক্ষেপ করার পরিবর্তে সাধারণত যদি আপনি এটি উল্লেখ করার চেষ্টা করেন তবে ঘটবে। (আপনি এটা প্রথম বন্ধনী আবৃত একটি সহজ পরিবর্তনশীল দিতে পারেন, কিন্তু না যে জন্য অনেক ব্যবহারে নেই হয় একটি পূর্ণ একটি অবাস্তব পরিবর্তনশীল জড়িত অভিব্যক্তি।)।
এটিই বিতর্কিত। আপনি যখন অস্তিত্ব নেই এমন কোনও সংস্থার সম্পত্তি অ্যাক্সেস করেন, আপনি তত্ক্ষণাত্ অন্যান্য ভাষার মতো একটি ত্রুটি পান না। পরিবর্তে আপনি একটি undefinedবস্তু পেতে । (এবং তারপরে আপনি যখন undefinedস্ক্রিপ্টে সেই অবজেক্টটি ব্যবহার করার চেষ্টা করবেন তখন জাভাস্ক্রিপ্টটি সরাসরি কোনও ত্রুটি ছুঁড়ে ফেলেছে তার চেয়ে ট্র্যাক করা অনেক বেশি কঠিন একটি অদ্ভুত পথে হবে))
এটি প্রায়শই বৈশিষ্ট্যের অস্তিত্ব পরীক্ষা করতে ব্যবহৃত হয়:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
যাইহোক, কারণ আপনি undefinedঅন্য কোনও মানের মতো নির্ধারণ করতে পারেন :
o.prop= undefined;
এটি প্রকৃতপক্ষে সম্পত্তিটি আছে কিনা তা সনাক্ত করতে পারে না। inঅপারেটরটি ব্যবহার করা ভাল , যা জাভাস্ক্রিপ্টের মূল নেটস্কেপ সংস্করণে ছিল না, তবে এখনই সর্বত্র পাওয়া যায়:
if ('prop' in o)
...
সংক্ষেপে, undefinedএকটি জাভাস্ক্রিপ্ট-নির্দিষ্ট মেস, যা সবাইকে বিভ্রান্ত করে। Functionচ্ছিক ফাংশন যুক্তি ছাড়াও, যেখানে জেএসের আর কোনও মার্জিত মেকানিজম নেই, undefinedএড়ানো উচিত। এটি কখনই ভাষার অংশ হওয়া উচিত ছিল না; null(2) এবং (3) এর জন্য ঠিক জরিমানা কাজ করত এবং (4) একটি ভুল ধারণা যা কেবলমাত্র বিদ্যমান কারণ জাভাস্ক্রিপ্টের কোনও ব্যতিক্রম ছিল না।
কি if (!testvar)আসলে কি? এটি কি অপরিজ্ঞাত এবং নাল বা কেবল অপরিজ্ঞাত জন্য পরীক্ষা করে?
এই ধরনের একটি 'truthiness' বিরুদ্ধে পরীক্ষা চেক false, undefined, null, 0, NaNএবং খালি স্ট্রিং। তবে এই ক্ষেত্রে, হ্যাঁ, এটি সত্যই undefinedএটির সাথে সম্পর্কিত। আইএমও, এটি সম্পর্কে আরও স্পষ্ট হওয়া উচিত এবং বলা উচিত if (testvar!==undefined)।
একবার কোনও ভেরিয়েবল সংজ্ঞায়িত হয়ে গেলে আমি এটিকে আবার সংজ্ঞায়িত করতে পারি (অতএব ভেরিয়েবলটি মুছে ফেলা)।
আপনি অবশ্যই undefinedএটি বরাদ্দ করতে পারেন, তবে এটি ভেরিয়েবল মুছবে না। কেবলমাত্র delete object.propertyঅপারেটর সত্যই জিনিসগুলি সরিয়ে দেয়।
deleteপ্রকৃত পক্ষে ভেরিয়েবলের পরিবর্তে বৈশিষ্ট্যগুলির জন্য বোঝানো হয়। ব্রাউজারগুলি আপনাকে সোজা দিয়ে দূরে সরিয়ে দেবে delete variable, তবে এটি ভাল ধারণা নয় এবং ECMAScript পঞ্চম সংস্করণের কঠোর মোডে কাজ করবে না। আপনি এখন এটি আবর্জনা-সংগ্রহ করা যায় কিছু একটি রেফারেন্স মুক্ত করতে চান, এটা বলে দিতে স্বাভাবিকের হবে variable= null।
আমি কি পরামিতি হিসাবে অপরিবর্তিত পাস করতে পারি?
হ্যাঁ.