javascript - যবহ - জাভাস্ক্রিপ্ট টিউটোরিয়াল




জাভাস্ক্রিপ্ট নল এবং অনির্ধারিত মধ্যে পার্থক্য কি? (20)

আপনি প্রোগ্রাম স্তরের, স্বাভাবিক, বা মূল্যের অনুপস্থিত অনুপস্থিতিকে প্রতিনিধিত্ব করার জন্য একটি সিস্টেম স্তরের, অপ্রত্যাশিত, বা ত্রুটি-অনুপস্থিতির মূল্য এবং নল অনুপস্থিতির অনির্ধারিত বিবেচনা করতে পারেন।

জাভাস্ক্রিপ্টের মাধ্যমে: ডিফল্ট গাইড

আমি জাভাস্ক্রিপ্ট মধ্যে null এবং undefined মধ্যে পার্থক্য কি জানতে চান।


জাভাস্ক্রিপ্টে নুল এবং অনির্ধারিত উভয় মান অনুপস্থিতি নির্দেশ করে।

var a = null; //variable assigned null value
var b;  // undefined

বস্তুটির অনুপস্থিতির জন্য উভয়ই বিদ্যমান রয়েছে তবে: অনির্ধারিত অর্থ আসলে পরিবর্তনশীল নয়। ফাংশন যা কোনও ফাংশন পরামিতি প্রদান করে না যার জন্য কোনও মান সরবরাহ করা হয় না, অনির্ধারিত মানটি ফেরত দেওয়া হয়। নিল এবং অনির্ধারিত মধ্যে পার্থক্য করতে কঠোর সমতা অপারেটর === ব্যবহার করুন।

রেফারেন্স: http://www.thesstech.com/javascript/null-and-undefined


অপরিবর্তিত অর্থ একটি পরিবর্তনশীল ঘোষণা করা হয়েছে কিন্তু কোন মান নেই:

var var1;
alert(var1); //undefined
alert(typeof var1); //undefined

নুল একটি নিয়োগের হয়:

var var2= null;
alert(var2); //null
alert(typeof var2); //object

আমি here থেকে এই বাছাই করা

অনির্ধারিত মানটি যখন একটি পরিবর্তনশীল একটি মান বরাদ্দ করা হয় না তখন ব্যবহৃত একটি আদিম মান।

নল মান একটি আদিম মান যা নল, খালি, বা অস্তিত্বহীন রেফারেন্স উপস্থাপন করে।

যখন আপনি var মাধ্যমে একটি পরিবর্তনশীল ঘোষণা করেন এবং এটি একটি মান দেয় না, এটি মান অনির্ধারিত থাকবে। নিজের দ্বারা, যদি আপনি WScript.Echo () বা alert () এই মানটি চেষ্টা করেন তবে আপনি কিছু দেখতে পাবেন না। তবে, যদি আপনি এটিতে একটি ফাঁকা স্ট্রিং যুক্ত করেন তবে হঠাৎ এটি প্রদর্শিত হবে:

var s;
WScript.Echo(s);
WScript.Echo("" + s);

আপনি একটি পরিবর্তনশীল ঘোষণা করতে পারেন, এটি নিলতে সেট করতে পারেন, এবং আচরণটি অভিন্ন যা ব্যতীত আপনি "নাল" প্রিন্ট আউট বনাম "অনির্ধারিত" দেখতে পাবেন। এটি প্রকৃতপক্ষে একটি ছোট পার্থক্য।

আপনি এমন একটি পরিবর্তনশীলের তুলনা করতে পারেন যা নিল বা বিপরীতভাবে অনির্ধারিত, এবং শর্তটি সত্য হবে:

undefined == null
null == undefined

তারা, যদিও, দুটি ভিন্ন ধরনের বলে মনে করা হয়। অনির্ধারিত যদিও সব ধরনের একটি টাইপ, নাল একটি বিশেষ বস্তু মান বলে মনে করা হয়। আপনি typeof () ব্যবহার করে এটি দেখতে পারেন যা একটি পরিবর্তনশীল সাধারণ ধরন প্রতিনিধিত্ব করে একটি স্ট্রিং প্রদান করে:

var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));

উপরের স্ক্রিপ্টটি চালানো নিম্নলিখিত আউটপুট ফলাফল হবে:

undefined
object

তাদের ভিন্ন ভিন্ন ধরনের, তথাপি তারা যদি এক সদস্যের অ্যাক্সেস করার চেষ্টা করে তবেও তারা একই কাজ করবে, উদাহরণস্বরূপ বলা হয় যে তারা একটি ব্যতিক্রম নিক্ষেপ করবে। ডাব্লুএসএইচ-এর মাধ্যমে আপনি দেখতে পাবেন যে ভার্চুমটি নল বা বস্তু নয় এবং এটি যদি ভাগ্যবান হয় (তবে এটি অন্য নিবন্ধের জন্য একটি বিষয়)।

আপনি স্পষ্টভাবে অনির্ধারিত একটি পরিবর্তনশীল সেট করতে পারেন, কিন্তু আমি অত্যন্ত এটি বিরুদ্ধে পরামর্শ। আমি কেবলমাত্র ভেরিয়েবলগুলি সেট করার পরামর্শ দিই এবং আপনি যে জিনিসগুলি সেট করতে ভুলে গেছেন তার জন্য অনির্ধারিত মান ছেড়ে যান। একই সময়ে, আমি আপনাকে সবসময় প্রতি পরিবর্তনশীল সেট করতে উত্সাহিত করি। জাভাস্ক্রিপ্টটি সি-স্টাইল ভাষার তুলনায় একটি সুযোগ শৃঙ্খলা রয়েছে, সহজেই এমনকি প্রবীণ প্রোগ্রামারদের বিভ্রান্তিকর এবং নল সেটিংস ভেরিয়েবলগুলি এটির উপর ভিত্তি করে বাগগুলি প্রতিরোধ করার সেরা উপায়।

আপনি অপটিমাইন্ড পপ আপ দেখতে হবে যেখানে আরেকটি উদাহরণ মুছে ফেলার অপারেটর ব্যবহার করা হয়। সি-ওয়ার্ল্ড থেকে আমাদের মধ্যে যারা এটি একটি বস্তু ধ্বংস হিসাবে ভুলভাবে ব্যাখ্যা করতে পারে, কিন্তু এটি তাই নয়। এই অপারেশনটি কী করে একটি অ্যারে থেকে একটি সাবস্ক্রিপ্ট বা কোনও বস্তুর সদস্যকে সরান। অ্যারেগুলির জন্য এটি দৈর্ঘ্যকে প্রভাবিত করে না বরং বরং সাবস্ক্রিপ্টটিকে এখন অনির্ধারিত বলে মনে করা হয়।

var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);

উপরের স্ক্রিপ্টের ফলাফল হল:

0.) a
1.) undefined
2.) c

এমন একটি সাবস্ক্রিপ্ট বা সদস্য পড়ার সময় আপনি অনির্ধারিত ফিরে পাবেন যা কখনও অস্তিত্ব ছিল না।

অস্পষ্ট এবং অনির্ধারিত মধ্যে পার্থক্য হল: জাভাস্ক্রিপ্ট কিছুই নাল সেট করতে হবে, যা আমরা সাধারণত কি। যদিও আমরা অনির্ধারিত করতে ভেরিয়েবল সেট করতে পারি, আমরা নল পছন্দ করি কারণ এটি আমাদের জন্য কখনও এমন কিছু না। যখন আপনি ডিবাগ করছেন তখন অর্থহীন কিছু সেট আপনার নিজের কাজ এবং জাভাস্ক্রিপ্ট নয়। এর বাইরে, এই দুটি বিশেষ মান প্রায় সমান।


জাভাসস্রিপ্টে 5 টি আদিম ডাটা টাইপ রয়েছে স্ট্রিং, সংখ্যা, বুলিয়ান, নাল এবং অনির্ধারিত। আমি কিছু সহজ উদাহরণ দিয়ে ব্যাখ্যা করার চেষ্টা করব

আমরা একটি সহজ ফাংশন আছে বলুন

 function test(a) {

     if(a == null){
        alert("a is null");
     } else {
        alert("The value of a is " + a);
     }
  }

উপরের ফাংশনেও যদি (a == null) একই রকম থাকে (! a)

এখন আমরা পরামিতি পাস ছাড়া এই ফাংশন কল

   test(); it will alert "a is null";
   test(4); it will alert "The value of a is " + 4;

এছাড়াও

var a;
alert(typeof a); 

এই অনির্ধারিত দিতে হবে; আমরা একটি পরিবর্তনশীল ঘোষণা করেছি কিন্তু আমরা এই পরিবর্তনশীল কোনো মান ascigned করেনি; কিন্তু আমরা যদি লিখি

var a = null;
alert(typeof a); will give alert as object

তাই নল একটি বস্তু। একটি উপায়ে আমরা একটি 'মান'


জাভাস্ক্রিপ্টে, undefined মানে একটি পরিবর্তনশীল ঘোষণা করা হয়েছে কিন্তু এখনো একটি মান বরাদ্দ করা হয় নি, যেমন:

var TestVar;
alert(TestVar); //shows undefined
alert(typeof TestVar); //shows undefined

null একটি অ্যাসাইনমেন্ট মান। কোনও ভেরিয়েবল হিসাবে এটি একটি পরিবর্তনশীলকে বরাদ্দ করা যেতে পারে:

var TestVar = null;
alert(TestVar); //shows null
alert(typeof TestVar); //shows object

পূর্ববর্তী উদাহরণগুলি থেকে, এটি স্পষ্ট যে undefined এবং null দুটি স্বতন্ত্র ধরনের: undefined একটি ধরন নিজেই (অনির্ধারিত) এবং null একটি বস্তু।

null === undefined // false
null == undefined // true
null === null // true

এবং

null = 'value' // ReferenceError
undefined = 'value' // 'value'

ঠিক আছে, আমরা যখন অস্পষ্ট এবং undefined সম্পর্কে শুনতে পাই তখন বিভ্রান্ত হতে পারে, তবে আসুন এটি সহজভাবে শুরু করি, উভয়ই মিথ্যা এবং অনুরূপ উপায়ে একই রকম, কিন্তু জাভাস্ক্রিপ্টের অদ্ভুত অংশ তাদের দুটি গুরুত্বপূর্ণ পার্থক্য তৈরি করে, উদাহরণস্বরূপ, টাইপ অফ null 'object' টাইপ undefined 'undefined'

typeof null; //"object"
typeof undefined; //"undefined";

কিন্তু যদি আপনি নীচের হিসাবে == দিয়ে তাদের পরীক্ষা করেন তবে আপনি দেখতে পাচ্ছেন যে তারা উভয় মিথ্যাবাদী:

null==undefined; //true

এছাড়াও আপনি একটি বস্তুর সম্পত্তি বা একটি আদিম থেকে নিল বরাদ্দ করতে পারেন, যখন undefined কেবল কিছু বরাদ্দ না করে অর্জন করা যেতে পারে।

আমি একটি নজরে আপনার জন্য পার্থক্য প্রদর্শন দ্রুত ইমেজ তৈরি।


নুল এবং অনির্ধারিত উভয় কিছু মান অনুপস্থিতি প্রতিনিধিত্ব করতে ব্যবহৃত হয়।

var a = null;

একটি প্রাথমিক এবং সংজ্ঞায়িত করা হয়।

typeof(a)
//object

নাল জাভাস্ক্রিপ্ট একটি বস্তু

Object.prototype.toString.call(a) // [object Object]

var b;

খ অনির্ধারিত এবং uninitialized হয়

অনির্দিষ্ট বস্তুর বৈশিষ্ট্য এছাড়াও অনির্ধারিত হয়। উদাহরণস্বরূপ "x" বস্তু c তে সংজ্ঞায়িত করা হয় না এবং যদি আপনি cx অ্যাক্সেস করার চেষ্টা করেন তবে এটি অনির্ধারিত ফিরে আসবে।

সাধারণত আমরা অনির্ধারিত না পরিবর্তনশীল নিল বরাদ্দ।


যখন আপনি জাভাস্ক্রিপ্টে একটি পরিবর্তনশীল ঘোষণা করেন, এটি মানটিকে undefined বরাদ্দ করা হয়। এর মানে হল ভেরিয়েবল অপঠিত এবং ভবিষ্যতে কোনও মান নির্ধারণ করা যেতে পারে। এটিও বোঝায় যে আপনি এই মূল্যবোধটি ঘোষণার সময় ধরে রাখতে পারবেন এমন মানটি জানেন না।

এখন আপনি স্পষ্টভাবে একটি পরিবর্তনশীল null বরাদ্দ করতে পারেন। এর মানে হল যে পরিবর্তনশীল কোন মান নেই। উদাহরণস্বরূপ - কিছু লোকের মধ্যম নাম নেই। সুতরাং এই ক্ষেত্রে একটি ব্যক্তির বস্তুর middlename পরিবর্তনশীল মান নল নির্ধারণ করা ভাল।

এখন অনুমান করুন যে কেউ আপনার ব্যক্তি বস্তুর মিডলনাম পরিবর্তনশীল অ্যাক্সেস করছে এবং এর মানটি undefined । ডেভেলপার এই পরিবর্তনশীলকে ভুলে গেলে ভুলে যেতে পারে না বা তার কোনও মূল্য নেই। যদি এটি মান null , তবে ব্যবহারকারী সহজেই জানাতে পারে যে মিডলনামটির কোনো মান নেই এবং এটি একটি অচেনা পরিবর্তনশীল নয়।


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

জাভাস্ক্রিপ্টে আমরা নিম্নলিখিত ধরনের ভেরিয়েবল থাকতে পারি।

  1. Undeclared ভেরিয়েবল
  2. ঘোষিত কিন্তু unassigned ভেরিয়েবল
  3. আক্ষরিক অনির্দিষ্ট সঙ্গে বরাদ্দ ভেরিয়েবল
  4. আক্ষরিক নাল দিয়ে বরাদ্দ ভেরিয়েবল
  5. ভেরিয়েবল অনির্দিষ্ট বা নাল ছাড়া অন্য কিছু দিয়ে বরাদ্দ

নিম্নলিখিত এক ক্ষেত্রে এক প্রতিটি এক ব্যাখ্যা করে

  1. Undclclared ভেরিয়েবল : নিম্নলিখিত undeclared ভেরিয়েবল জন্য সত্য holds

    • শুধুমাত্র typeof () দ্বারা চেক করা যেতে পারে যা স্ট্রিং 'অনির্ধারিত' প্রদান করে
    • == অথবা === দিয়ে বা কোনও শর্তাধীন অপারেটর দ্বারা চেক করা যাবে না ? (রেফারেন্স ত্রুটি ফেলে দেয়)
  2. ঘোষিত কিন্তু unassigned ভেরিয়েবল

    • টাইপ ফেরত স্ট্রিং 'অনির্ধারিত'
    • == নুল আয় সত্য সঙ্গে চেক করুন
    • == অনির্ধারিত আয় সত্য সঙ্গে চেক করুন
    • === নুল ফেরত মিথ্যা সঙ্গে চেক করুন
    • === অনির্ধারিত আয় সত্য সঙ্গে চেক করুন
    • যদি বা শর্তাধীন অপারেটর ? মিথ্যা ফেরত
  3. আক্ষরিক অনির্ধারিত সঙ্গে বরাদ্দ ভেরিয়েবল: এই ভেরিয়েবল একইভাবে Declared কিন্তু unassigned ভেরিয়েবল হিসাবে গণ্য করা হয়।

  4. আক্ষরিক নাল দিয়ে বরাদ্দ ভেরিয়েবল

    • টাইপ ফেরত স্ট্রিং 'বস্তু'
    • == নুল আয় সত্য সঙ্গে চেক করুন
    • == অনির্ধারিত আয় সত্য সঙ্গে চেক করুন
    • === নুল আয় সত্য সঙ্গে চেক করুন
    • === অনির্ধারিত আয় মিথ্যা সঙ্গে চেক করুন
    • যদি বা শর্তাধীন অপারেটর ? মিথ্যা ফেরত
  5. ভেরিয়েবল অনির্দিষ্ট বা নাল ছাড়া অন্য কিছু দিয়ে বরাদ্দ

    • টাইপof নিম্নলিখিত স্ট্রিংগুলির মধ্যে একটি প্রদান করে: 'স্ট্রিং' , 'সংখ্যা' , 'বুলিয়ান' , 'ফাংশন' , 'অবজেক্ট' , 'সিম্বল'

নিম্নলিখিত একটি পরিবর্তনশীল সঠিক টাইপ পরীক্ষণের জন্য আলগোরিদিম প্রদান করে:

  1. টাইপফোনের সাহায্যে অনির্ধারিত / unassigned / অনির্ধারিত সঙ্গে নির্ধারিত জন্য চেক করুন। স্ট্রিং 'অনির্ধারিত' ফিরে আসা হলে ফিরে।
  2. === ব্যবহার করে নাল জন্য চেক করুন। সত্য হলে ফিরে 'নাল'
  3. Typeof ব্যবহার করে প্রকৃত টাইপ জন্য চেক করুন। 'অবজেক্ট' সমান না হলে রিটার্ন টাইপ
  4. Object object.prototype.toString.call (ও) প্রকৃত বস্তু টাইপ নির্ধারণ করুন। এটি জাভাস্ক্রিপ্ট বা DOM সংজ্ঞায়িত বস্তুগুলির জন্য নির্মিত একটি স্ট্রিং টাইপ '[বস্তু অবজেক্ট টাইপ ]' প্রদান করবে। ব্যবহারকারী নির্ধারিত বস্তুর জন্য এটি '[বস্তু অবজেক্ট]' প্রদান করে

আপনি ধরনের নির্ধারণ করার জন্য নিম্নলিখিত ইউটিলিটি ফাংশন ব্যবহার করতে পারেন। এটি বর্তমানে সব ECMA 262 2017 ধরনের সমর্থন করে।

function TypeOf(o,bReturnConstructor)
 {
   if(typeof o==='undefined') return 'undefined'
   if(o===null) return 'null'   
   if(typeof o!=='object') return typeof o

   var type=Object.prototype.toString.call(o)
  switch(type)
  {
     //Value types:4
     case '[object Number]': type='number';break;
     case '[object String]': type='string';break;
     case '[object Boolean]': type='boolean';break;
     case '[object Date]': type='date';break;


   //Error Types:7
     case '[object Error]': type='error';break;
     case '[object EvalError]': type='evalerror';break;
     case '[object RangeError]': type='rangeerror';break;
     case '[object ReferenceError]': type='referenceerror';break;
     case '[object SyntaxError]': type='syntaxerror';break;
     case '[object TypeError]': type='typeerror';break;
     case '[object URIError]': type='urierror';break;


    //Indexed Collection and Helper Types:13
     case '[object Array]': type='array';break;
     case '[object Int8Array]': type='int8array';break;
     case '[object Uint8Array]': type='uint8array';break;
     case '[object Uint8ClampedArray]': type='uint8clampedarray';break;
     case '[object Int16Array]': type='int16array';break;
     case '[object Uint16Array]': type='uint16array';break;
     case '[object Int32Array]': type='int32array';break;
     case '[object Uint32Array]': type='uint32array';break;
     case '[object Float32Array]': type='float32array';break;
     case '[object Float64Array]': type='float64array';break;
     case '[object ArrayBuffer]': type='arraybuffer';break;
     case '[object SharedArrayBuffer]': type='sharedarraybuffer';break;
     case '[object DataView]': type='dataview';break;

    //Keyed Collection Types:2
     case '[object Map]': type='map';break;
     case '[object WeakMap]': type='weakmap';break;

    //Set Types:2
     case '[object Set]': type='set';break;
     case '[object WeakSet]': type='weakset';break;

    //Operation Types
    case '[object RegExp]': type='regexp';break;
    case '[object Proxy]': type='proxy';break;
    case '[object Promise]': type='promise';break;

    case '[object Object]': type='object';
             if(bReturnConstructor && o.constructor) type=o.constructor.toString().match(/^function\s*([^\s(]+)/)[1];
         break;
    default:
        type=type.split(' ')[1]
        type=type.substr(0,type.length-1)   

   }
    return type 
}

undefined এবং null মধ্যে পার্থক্য সংক্ষিপ্ত, কিন্তু একটি পার্থক্য আছে। একটি পরিবর্তনশীল যার মান undefined কখনও শুরু করা হয়েছে। একটি পরিবর্তনশীল যার মান null স্পষ্টভাবে null একটি মান দেওয়া হয়, যার অর্থ হল পরিবর্তনশীল স্পষ্টভাবে কোন মান আছে সেট।আপনি তুলনা undefinedএবং অভিব্যক্তি nullব্যবহার করে null==undefined, তারা সমান হবে।


undefined টাইপের জন্য, এক এবং একমাত্র মান রয়েছে: undefined

null টাইপের জন্য, এক এবং একমাত্র মান রয়েছে: null

সুতরাং উভয় জন্য, লেবেল তার টাইপ এবং এর মান উভয়।

তাদের মধ্যে পার্থক্য। উদাহরণ স্বরূপ:

  • null একটি খালি মান
  • undefined একটি অনুপস্থিত মান

বা:

  • undefined এখনো একটি মান ছিল না
  • null একটি মান ছিল এবং আর নেই

প্রকৃতপক্ষে, null একটি বিশেষ অভিব্যক্তি , একটি সনাক্তকারী নয়, এবং এইভাবে আপনি এটি একটি পরিবর্তনশীল হিসাবে বরাদ্দ হিসাবে আচরণ করতে পারবেন না।

তবে, undefined একটি সনাক্তকারীnon-strict মোড এবং strict মোড উভয় ক্ষেত্রে, আপনি নামটির স্থানীয় পরিবর্তনশীলটিকে অনির্ধারিত করতে পারেন। কিন্তু এটি একটি ভয়ানক ধারণা!

function foo() {
    undefined = 2; // bad idea!
}

foo();

function foo() {
    "use strict";
    undefined = 2; // TypeError!
}

foo();

নাল একটি বিশেষ শব্দ যা মূল্যের অনুপস্থিতি নির্দেশ করে।

একটি মান হিসাবে এটি সম্পর্কে চিন্তা করুন, যেমন:

  • "foo" স্ট্রিং,
  • সত্যই বুলিয়ান,
  • 1234 সংখ্যা,
  • নাল অনির্দিষ্ট হয়।

অনির্ধারিত সম্পত্তি নির্দেশ করে যে একটি পরিবর্তনশীল একটি মান নিল সহ অন্তর্ভুক্ত করা হয় নি। মত

var foo;

সংজ্ঞায়িত খালি পরিবর্তনশীল datatype null হয়

তাদের উভয় কোন মান সঙ্গে একটি পরিবর্তনশীল একটি মান প্রতিনিধিত্ব করা হয়

এবং null একটি স্ট্রিং প্রতিনিধিত্ব করে না যার কোন মান নেই - খালি স্ট্রিং-

মত

var a = ''; 
console.log(typeof a); // string 
console.log(a == null); //false 
console.log(a == undefined); // false 

এখন যদি

var a;
console.log(a == null); //true
console.log(a == undefined); //true 

কিন্তু

var a; 
console.log(a === null); //false 
console.log(a === undefined); // true

সুতরাং প্রতিটি এক এটি ব্যবহার করার নিজস্ব উপায় আছে

অনির্ধারিত এটি পরিবর্তনশীল তথ্য টাইপ তুলনা করতে ব্যবহার করুন

একটি পরিবর্তনশীল একটি মান খালি এটি নাল ব্যবহার করুন

var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object 

নাল একটি ভাষা কীওয়ার্ড যা একটি বিশেষ মানকে মূল্যায়ন করে যা মানটির অনুপস্থিতি নির্দেশ করতে ব্যবহৃত হয়। নাল টাইপ অপারেটর ব্যবহার করে স্ট্রিংটি "বস্তু" প্রদান করে, যা নির্দেশ করে যে নলটি বিশেষ বস্তুর মান হিসাবে বিবেচিত হতে পারে যা "কোন বস্তু" নির্দেশ করে। অনুশীলনে, যাইহোক, নল সাধারণত তার নিজস্ব ধরনের একমাত্র সদস্য হিসাবে বিবেচিত হয় এবং এটি সংখ্যা এবং স্ট্রিং এবং বস্তুর জন্য "কোন মান" নির্দেশ করতে ব্যবহার করা যেতে পারে। সর্বাধিক প্রোগ্রামিং ভাষাগুলির জাভাস্ক্রিপ্টের নাল সমান রয়েছে: আপনি এটির সাথে নিল বা নিল হিসাবে পরিচিত হতে পারেন।

জাভাস্ক্রিপ্ট এছাড়াও মান অনুপস্থিতি নির্দেশ করে একটি দ্বিতীয় মান আছে। অনির্ধারিত মান অনুপস্থিত একটি গভীর ধরনের প্রতিনিধিত্ব করে। এটি এমন ভেরিয়েবলগুলির মান যা প্রাথমিকভাবে শুরু হয়নি এবং যখন আপনি কোনও বস্তুর সম্পত্তি বা অ্যারের উপাদানটির মূল্য জিজ্ঞাসা করেন তখন উপস্থিত মানটি উপস্থিত হয় না। অনির্ধারিত মান ফাংশন দ্বারা ফেরত দেওয়া হয় যার কোনও ফেরত মান নেই এবং ফাংশন প্যারামিটারগুলির মান যা কোন যুক্তি সরবরাহ করা হয় না। অনির্ধারিত একটি পূর্বনির্ধারিত গ্লোবাল ভেরিয়েবল (নাল মত একটি ভাষা শব্দ নয়) যা অনির্ধারিত মানের জন্য সূচনা করা হয়। ECMAScript 3, অনির্ধারিত একটি পঠন / লেখার পরিবর্তনশীল এবং এটি কোনও মানতে সেট করা যেতে পারে। এই ত্রুটিটি ECMAScript 5 এ সংশোধন করা হয়েছে এবং অনির্ধারিত ভাষাটির সেই সংস্করণটিতে কেবল-পঠনযোগ্য। আপনি যদি অনির্দিষ্ট মানতে টাইপফো অপারেটরটি প্রয়োগ করেন তবে এটি "অনির্ধারিত" প্রদান করে, যা এই মানটিকে বিশেষ ধরণের একমাত্র সদস্য বলে নির্দেশ করে।

এই পার্থক্য সত্ত্বেও, নল এবং অনির্ধারিত উভয় মান একটি অনুপস্থিতি নির্দেশ করে এবং প্রায়ই interchangeably ব্যবহার করা যেতে পারে। সমতা অপারেটর == তাদের সমান হতে বিবেচনা করে। (কঠোর সমতা অপারেটর === ব্যবহার করুন তাদের পার্থক্য করার জন্য।) উভয় মিথ্যাবাদী মান-বুলিয়ান মানের প্রয়োজন হলে তারা মিথ্যা বলে আচরণ করে। নল বা অনির্ধারিত কোন বৈশিষ্ট্য বা পদ্ধতি আছে। আসলে, ব্যবহার করে। অথবা [] কোনও সম্পত্তি বা এই মানগুলির পদ্ধতি অ্যাক্সেস করার জন্য একটি TypeError হয়।

আপনি প্রোগ্রাম স্তরের, স্বাভাবিক, বা মূল্যের অনুপস্থিত অনুপস্থিতিকে প্রতিনিধিত্ব করার জন্য একটি সিস্টেম স্তরের, অপ্রত্যাশিত, বা ত্রুটি-অনুপস্থিতির মূল্য এবং নল অনুপস্থিতির অনির্ধারিত বিবেচনা করতে পারেন। যদি আপনি এই ভেরিয়েবলগুলির একটি ভেরিয়েবল বা সম্পত্তিতে বরাদ্দ করতে চান বা কোনও ফাংশনে এই মানগুলির মধ্যে একটি পাস করতে চান, তবে নল প্রায় সবসময় সঠিক পছন্দ।


নিল এবং অনির্ধারিত দুটি স্বতন্ত্র বস্তুর ধরন যা নিম্নলিখিতগুলিতে রয়েছে:

  • উভয়ই যথাক্রমে একটি একক মান, নাল এবং অনির্ধারিত থাকতে পারে ;
  • উভয়ই কোন বৈশিষ্ট্য বা পদ্ধতি এবং কোনও বৈশিষ্ট্যের পড়ার প্রচেষ্টাটি কোনও রান-টাইম ত্রুটির ফলস্বরূপ (অন্য সকল বস্তুর জন্য, আপনি অনির্ধারিত সম্পত্তি পড়ার চেষ্টা করলে মানটি অনির্ধারিত পেতে পারেন);
  • মানগুলি নিল এবং অনির্ধারিতগুলি একে অপরের সমান এবং == এবং != অপারেটরদের দ্বারা অন্য কিছুই বলে না।

অনুরূপতা যদিও এখানে শেষ। একবারের জন্য কীভাবে কীওয়ার্ডগুলি অস্পষ্ট এবং অনির্ধারিতভাবে প্রয়োগ করা হয় তার মধ্যে একটি মৌলিক পার্থক্য রয়েছে। এটি সুস্পষ্ট নয়, তবে নিচের উদাহরণটি বিবেচনা করুন:

var undefined = "foo";
WScript.Echo(undefined); // This will print: foo

অনির্ধারিত , NaN এবং Infinity শুধুমাত্র "superglobal" ভেরিয়েবলগুলির প্রারম্ভিক নামগুলির নাম - তারা রান-টাইম এ শুরু হয় এবং সাধারণ নামগুলির সাথে স্থানীয় বা স্থানীয় পরিবর্তনশীল দ্বারা ওভাররাইড করা যেতে পারে।

এখন, নিল সঙ্গে একই জিনিস চেষ্টা করা যাক:

var null = "foo"; // This will cause a compile-time error
WScript.Echo(null);

ওহো! নুল , সত্য এবং মিথ্যা সংরক্ষিত কীওয়ার্ড - কম্পাইলার আপনি পরিবর্তনশীল বা সম্পত্তি নাম হিসাবে তাদের ব্যবহার করতে দেয় না

আরেকটি পার্থক্য হল অনির্ধারিত একটি আদিম প্রকার, যখন নাল একটি বস্তুর ধরন (একটি বস্তুর রেফারেন্সের অনুপস্থিতি নির্দেশ করে)। নিম্নোক্ত বিবেচনা কর:

WScript.Echo(typeof false); // Will print: boolean
WScript.Echo(typeof 0); // Will print: number
WScript.Echo(typeof ""); // Will print: string
WScript.Echo(typeof {}); // Will print: object
WScript.Echo(typeof undefined); // Will print: undefined
WScript.Echo(typeof null); // (!!!) Will print: object

এছাড়াও, সংখ্যাসূচক প্রেক্ষিতে নিল এবং অনির্ধারিত পদ্ধতির মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে:

var a; // declared but uninitialized variables hold the value undefined
WScript.Echo(a === undefined); // Prints: -1

var b = null; // the value null must be explicitly assigned 
WScript.Echo(b === null); // Prints: -1

WScript.Echo(a == b); // Prints: -1 (as expected)
WScript.Echo(a >= b); // Prints: 0 (WTF!?)

WScript.Echo(a >= a); // Prints: 0 (!!!???)
WScript.Echo(isNaN(a)); // Prints: -1 (a evaluates to NaN!)
WScript.Echo(1*a); // Prints: -1.#IND (in Echo output this means NaN)

WScript.Echo(b >= b); // Prints: -1 (as expected)
WScript.Echo(isNaN(b)); // Prints: 0 (b evaluates to a valid number)
WScript.Echo(1*b); // Prints: 0 (b evaluates to 0)

WScript.Echo(a >= 0 && a <= 0); // Prints: 0 (as expected)
WScript.Echo(a == 0); // Prints: 0 (as expected)
WScript.Echo(b >= 0 && b <= 0); // Prints: -1 (as expected)
WScript.Echo(b == 0); // Prints: 0 (!!!)

যখন গাণিতিক এক্সপ্রেশন বা সংখ্যাসূচক তুলনাগুলিতে ব্যবহৃত হয় তখন 0 নল হয়ে যায় - একইভাবে মিথ্যা হিসাবে , এটি মূলত একটি বিশেষ ধরনের "শূন্য"। অপ্রাসঙ্গিক , অন্যদিকে, সত্য "কিছুই না" এবং আপনি যখন সাংখ্যিক প্রসঙ্গে এটি ব্যবহার করার চেষ্টা করেন তখন NaN ("সংখ্যা নয়") হয়ে যায়।

নোট এবং অনির্ধারিত == এবং != অপারেটরগুলির থেকে বিশেষ চিকিত্সা গ্রহণ করুন, তবে আপনি == এবং == সত্য সংখ্যাসূচক সমতাটি এক্সপ্রেশন (a >= b && a <= b)


এই বিষয়ে রায়ান Morr এর পুঙ্খানুপুঙ্খ নিবন্ধ ...

"সাধারনত, যদি আপনি একটি পরিবর্তনশীল বা সম্পত্তির জন্য একটি অ-মান বরাদ্দ করতে চান, এটি একটি ফাংশনে পাস করুন, অথবা এটি একটি ফাংশন থেকে ফিরিয়ে আনুন, নল সর্বদা সর্বদা সর্বোত্তম বিকল্প। এটি সহজভাবে রাখতে, জাভাস্ক্রিপ্টটি অনির্ধারিত এবং প্রোগ্রামারদের ব্যবহার করা উচিত নাল ব্যবহার করুন। "

নিল এবং অনির্ধারিত শাশ্বত আবির্ভাব অন্বেষণ দেখুন


শুধু আমার মতামত যোগ করতে -

একটি পরিবর্তনশীল যা শুধুমাত্র ঘোষণা করা হয় এবং কখনও কখনও ব্যবহৃত হয় না, সি ++ [অথবা একটি সতর্কতা আইডিই তে পতাকাঙ্কিত করা হয়] -এর মতো সংকলিত ভাষাগুলির ক্ষেত্রে একটি অপ্টিমাইজেশান কম্পাইলার দ্বারা সরিয়ে ফেলা হয়। এটি পরিশেষে মানে যে পরিবর্তনশীল অস্তিত্ব কারণ এটি মেমরি বরাদ্দ করা হয় না।

জাভাস্ক্রিপ্ট ইন্টারপ্রেটারের ক্ষেত্রে, [আমি অনুমান করি] একটি পরিবর্তনশীলকে শুধুমাত্র বিন্দু থেকে বিদ্যমান হিসাবে বিবেচনা করা হয় যেখানে এটি একটি মান দেওয়া হয়। যে বিন্দু আগে, এটি ধরনের "অনির্ধারিত", এবং এটি জন্য কোন মেমরি বরাদ্দ করা হয়। এবং, তাই তার টাইপ অনির্দিষ্ট হয়।

জাভাস্ক্রিপ্ট মধ্যে একটি নাল হয় একটি মান যে একটি ঠিকানা প্রতিনিধিত্ব করে, কিন্তু এখনো কিছুই [অবর্তমান রেফারেন্স] এ ঠিকানাটি পয়েন্ট। তবুও, এটি একটি মান।


একটি পরিবর্তনশীল আরম্ভ করা হয় না তাহলে এটি অনির্ধারিত হয়। অনির্দিষ্ট একটি বস্তু নয়। উদাহরণ: var MyName; console.log (মাইনাম টাইপ);

কনসোল লগ ইন ডেভেলপমেন্ট টুলটি পরীক্ষা করে দেখুন, এটি অনির্ধারিত হিসাবে মুদ্রণ করা হবে।

null aa aa object। যদি আপনি কিছু ভেরিয়েবলকে নাল করতে চান তবে নিল ব্যবহার করা হয়। নাল পরিবর্তনশীল বিদ্যমান কিন্তু মানটি পরিচিত না। এটি একটি পরিবর্তনশীল প্রো ব্যাকরণগতভাবে বরাদ্দ করা উচিত। নাল স্বয়ংক্রিয়ভাবে আরম্ভ করা হয় না।

উদাহরণ: var MyName = null; console.log (মাইনাম টাইপ); উন্নয়ন সরঞ্জাম মধ্যে কসোল লগ পরীক্ষা করুন, এটি একটি বস্তু হতে হবে।


জাভাস্ক্রিপ্ট মধ্যে সব ভেরিয়েবল মূল মান জোড়া হিসাবে সংরক্ষণ করা হয়। প্রতিটি পরিবর্তনশীল পরিবর্তনশীল_নাম: variable_value / রেফারেন্স হিসাবে সংরক্ষণ করা হয়

অনির্ধারিত অর্থ একটি পরিবর্তনশীল মেমরি একটি স্থান দেওয়া হয়েছে, কিন্তু কোন মান এটি বরাদ্দ করা হয়। একটি ভাল অনুশীলন হিসাবে, আপনি এই ধরনের একটি নিয়োগ হিসাবে ব্যবহার করা উচিত নয়।

কোডটি পরবর্তী সময়ে কোনও ভেরিয়েবলের মান ছাড়াই মানতে চান তখন কীভাবে নির্দেশ দিতে হয়? আপনি টাইপ নালটি ব্যবহার করতে পারেন , যা একই জিনিসটিকে একটি মানের অভাবে সংজ্ঞায়িত করতে ব্যবহৃত হয়, কিন্তু এটি অনির্ধারিত হিসাবে একই নয়, যেমন এই ক্ষেত্রে আপনার কাছে প্রকৃতপক্ষে মেমরির মান রয়েছে। যে মান নাল

উভয় অনুরূপ কিন্তু ব্যবহার এবং অর্থ ভিন্ন।


মূলত, অনির্ধারিত একটি বৈশ্বিক পরিবর্তনশীল যা জাভাস্ক্রিপ্ট রান সময় তৈরি করে কিনা নাল মানে কোনও ভেরিয়েবলকে কোনও মান দেওয়া হয়নি (আসলে নলটি নিজেই একটি বস্তু)।

এর একটি উদাহরণ নিতে যাক:

        var x;  //we declared a variable x, but no value has been assigned to it.
        document.write(x) //let's print the variable x

আপনি আউটপুট হিসাবে পাবেন কি অনির্ধারিত

এখন,

        x=5;
        y=null;
        z=x+y;

এবং আপনি 5 আউটপুট হিসাবে পাবেন । যে অনির্ধারিত এবং নাল মধ্যে প্রধান পার্থক্য





undefined