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


1080

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




11
আমি সবসময় ভাবতাম: nullআপনি কি এটি খালি সেট করেছেন, undefinedএটি খালি কারণ এটি সেট করা হয়নি। বা nullউদ্দেশ্য ফাঁকা, undefinedএখনও খালি। মূলত এটি অভিপ্রায় দেখায়।
মুহাম্মদ উমার


15
NaN। নিজের জন্য দেখুন. console.log (নাল-undefined)। নাল এবং অপরিজ্ঞাত মধ্যে পার্থক্য NaN। (মনে রাখবেন যে প্রশ্নটি ভুল বোঝার জন্য আমাকে শিখানোর আগে এটি হাস্যরসের চেষ্টা attempt)
ইভান

উত্তর:


1035

জাভাস্ক্রিপ্টে, এর 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'

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

34
পরিবর্তনশীল পাশাপাশি মোটেও সংজ্ঞায়িত করা যায় না। উদাহরণস্বরূপ: কনসোল.লগ (টাইপফ (অ্যাবসি)); অপরিবর্তিত
নীড় ও।

19
নীর ও এর মন্তব্যটি অত্যন্ত গুরুত্বপূর্ণ। আমি যদি এমন কোনও ভেরিয়েবল রাখতে চাই যার শুরুতে কোনও মূল্য নেই তবে আমি লিখি "... = নাল", যেমন "মাইভার = নাল"। এইভাবে - যখন আমি "if (myxar == নাল) ভুল করে টাইপ করি {...}" - যদি ব্লকটি কার্যকর হয় না। অপরিজ্ঞাতকৃত সাথে আমার এই সুবিধা নেই: মাইভার = অপরিবর্তিত; মাইভার = 4; যদি (টাইফফ মিক্সার == "অপরিজ্ঞাত") {...}
ওল্ফগ্যাং অ্যাডামেক

11
@ ওল্ফগ্যাং অ্যাডামেক, ত্রুটিমুক্ত প্রোগ্রামিংটি ভুল টাইপ সম্পর্কে নয়।
জোর্হে ফুয়েন্তেস গঞ্জালেজ

12
সুতরাং মূলত নাল মান মানে একটি পরিবর্তনশীল স্পষ্টভাবে সেট করা হয়েছে (কোনও মান = নাল নয়) বা আরম্ভ করা হয়েছে এবং কিছুই নয় বলে সংজ্ঞায়িত করা হয়েছে। অপরিজ্ঞাত মানে। এটি সম্ভবত কখনও আরম্ভ করা হয়নি বা এটি যদি এটি কখনও সংজ্ঞায়িত হয় নি।
মুহাম্মদ উমর

73

আমি এখান থেকে তুলেছি

অপরিবর্তিত মান হ'ল একটি আদিম মান যখন কোনও ভেরিয়েবলকে কোনও মূল্য নির্ধারিত না করা হয় used

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

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

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

আপনি একটি ভেরিয়েবল ঘোষণা করতে পারেন, এটিকে শূন্যতে সেট করতে পারেন এবং আচরণটি অভিন্ন হিসাবে আপনি "নাল" মুদ্রিত বনাম "অপরিজ্ঞাত" দেখতে পাবেন। এটি আসলে একটি ছোট পার্থক্য।

আপনি এমন কোনও পরিবর্তনশীলকেও তুলনা করতে পারবেন যা শূন্য বা বিপরীতে সংজ্ঞায়িত এবং শর্তটি সত্য হবে:

undefined == null
null == undefined

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

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

সাবস্ক্রিপ্ট বা অস্তিত্ব নেই এমন সদস্য পড়ার সময় আপনি অপরিজ্ঞাত ফেরত পাবেন।

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


8
সত্যিই একটি ভাল উত্তর। তবে কেবল উল্লেখ করার জন্য, আপনি যখন "অপরিজ্ঞাত == নাল" পরীক্ষা করেছিলেন তখন টাইপ চেকিং কঠোর ছিল না। সুতরাং এটি "সত্য" ফিরে আসল। আপনি যদি "অপরিবর্তিত === নাল" পরীক্ষা করেন তবে এটি মিথ্যা হবে।
WOlVeRiNe

3
এটি লক্ষণীয় যে 1111-এ commentচ্ছিক ফাংশন প্যারামগুলির আবির্ভাবের সাথে প্রবাহের মতো টাইপ-চেকিং সিস্টেমগুলির উত্থান এবং প্রতিক্রিয়াটির ব্যাপকতা (এগুলির সমস্তই অপরিজ্ঞাত এবং নালকে একেবারেই আলাদাভাবে আচরণ করে) এর পুরানো জ্ঞান সাধারণত অপরিশোধিতের চেয়ে নাল ব্যবহার করা আর এত কঠোরভাবে ধরে না। অপরিজ্ঞাত আসলে এমন অনেক ক্ষেত্রেই নালাকে পছন্দনীয় যেখানে আপনি স্পষ্টভাবে ডিফল্ট মানটি ব্যবহার করতে চান (যেমন anচ্ছিক প্যারাম বা alচ্ছিক প্রতিক্রিয়ার জন্য)।
0x24a537r9

64

এই পার্থক্য

(চরিত্রের অভাবে অক্ষর যুক্ত করা, সুতরাং আমাকে এটি পোস্ট করার অনুমতি দেওয়া হয়েছে))


1
দয়া করে আপনি চিত্র উত্সটির জন্য বিশিষ্টতা অন্তর্ভুক্ত করতে পারেন?
ভেগা

1
@ ভেগা দুর্ভাগ্যবশত না, আমি মনে করি না ইমগুর ডটকমের কোথাও অন্য কোথা থেকে আমি এটি কোথায় পেয়েছি এবং এটি সম্ভবত কোনও পোস্ট থেকে, মূল উত্স থেকে নয়। এমনকি এম্বেড করা লিঙ্কটি এই সংস্করণটি কে পোস্ট করেছে তার কোনও সূত্র দেয় না, তাই আমি সত্যিই এটির জন্যও অনুসন্ধান করতে পারি না।
সেবাস্তিয়ান নর

1
হা হা হা ... এটি আমি সবচেয়ে ভাল ব্যাখ্যাটি দেখেছি! শান্ত!
আকবর মিরসিদ্দিকভ

36

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

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

  • "ফু" স্ট্রিং,
  • সত্য বুলিয়ান,
  • 1234 নম্বর,
  • নাল অপরিজ্ঞাত

অপরিজ্ঞাত সম্পত্তি নির্দেশ করে যে একটি চলক নালও সহ একটি মান বরাদ্দ করা হয়নি। মত

var foo;

সংজ্ঞায়িত খালি ভেরিয়েবলটি nullডেটাটাইপের হয়undefined


তারা উভয়ই কোনও ভেরিয়েবলের মান উপস্থাপন করছে no

এবং 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 

নাল একটি ডেটা টাইপ।
অপরিজ্ঞাত

9
nullএকেবারে একটি ডেটা টাইপ: এমএসডিএন.মাইক্রোসফট /en-us/library/ie/7wkd9z69(v=vs.94).aspx। সত্য যে typeof nullআয় objectকরে পিছন-সঙ্গতির জন্য রয়ে গেছে এর নাম ECMAScript প্রথম সংস্করণে উপস্থিত একটি সুপরিচিত এবং নথিভুক্ত বাগ সংশোধন করা হয়। আপনি যে মন্তব্যটি আসলে আপনার মন্তব্যে পোস্ট করেছেন সেটি পৃষ্ঠার অর্ধেকটা নীচে "টাইপফুল নাল // অবজেক্ট (ECMAScript এ বাগ, নাল হওয়া উচিত)" নীচে লিখেছেন! সুতরাং দয়া করে, ডাউন-ভোটে মন্তব্য করার আগে কিছু অনুসন্ধানের প্রচেষ্টা দেখান
ড্যানওয়েলম্যান

1
সংজ্ঞাগুলি স্ববিরোধী: "" বনাম "মানের অনুপস্থিতি একটি মান নির্ধারণ করা হয়নি"। এটা কি এক নয়?
জোন

3
আমি এই উত্তরের সাথে একমত নই। নাল এবং অপরিজ্ঞাত উভয় স্বতন্ত্র ডেটাটাইপ। নাল টাইপ নাল এবং অপরিজ্ঞাত টাইপ অপরিজ্ঞাত। কেবলমাত্র সত্যবাদী অপারেটর (==) ব্যবহার করার সময় আমরা দেখতে পাব যে জাভাস্ক্রিপ্টটি এর সত্য বলেছে তবে একটি কঠোর তুলনা (===) একটি মিথ্যা উত্পাদন করে।
আলাবৌদি

19

নাল : একটি পরিবর্তনশীল জন্য মান অনুপস্থিত; অপরিশোধিত : নিজেই পরিবর্তনশীল অনুপস্থিত;

.. যেখানে ভেরিয়েবল একটি মান সঙ্গে যুক্ত একটি প্রতীকী নাম।

জাতীয় সঙ্গে পরোক্ষভাবে init সদ্য ঘোষিত ভেরিয়েবল প্রতি সদয় যথেষ্ট হতে পারে নাল , কিন্তু এটা না।


25
var a = {}; a.n = undefined;' then ..a.hasOwnProperty ('n') == সত্য` ... সুতরাং ভেরিয়েবলের অনুপস্থিতি বলা এখন আর সঠিক নয়
মুহাম্মদ উমার

17

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

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

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

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

  1. অঘোষিত ভেরিয়েবল : নিম্নলিখিতটি অঘোষিত ভেরিয়েবলগুলির জন্য সত্য holds

    • কেবল টাইফফ () দ্বারা পরীক্ষা করা যায় যা স্ট্রিংটি 'অপরিজ্ঞাত' দেয়
    • সঙ্গে চেক করা যাবে না == বা === বা যদি বা শর্তসাপেক্ষ অপারেটর ? (রেফারেন্স ত্রুটি ছুড়ে ফেলে)
  2. ঘোষিত তবে স্বাক্ষরিত চলকগুলি

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

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

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

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

নিম্নলিখিতটি ভেরিয়েবলের সঠিক ধরণের পরীক্ষার জন্য অ্যালগরিদম সরবরাহ করে:

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

প্রকার নির্ধারণের জন্য আপনি নিম্নলিখিত ইউটিলিটি ফাংশনটিও ব্যবহার করতে পারেন। এটি বর্তমানে সমস্ত ইসিএমএ 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 
}

12

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

জাভাস্ক্রিপ্টের মাধ্যমে: সংজ্ঞা নির্দেশিকা


11

আমি ব্যাখ্যা করব undefined, nullএবং Uncaught ReferenceError:

1 - Uncaught ReferenceError: পরিবর্তনশীল ঘোষণা করা হয়নি আপনার স্ক্রিপ্টের মধ্যে, এই varaible কোন রেফারেন্স
2 - undefined: পরিবর্তনশীল ঘোষিত কিন্তু ইনিশিয়ালাইজ না
3 - null: চলক ঘোষণা করে এবং একটি খালি মান


9

অপরিজ্ঞাত অর্থ একটি চলক ঘোষিত হয়েছে তবে এর কোনও মূল্য নেই:

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

নাল একটি অ্যাসাইনমেন্ট:

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

9

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

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

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

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

অপরিজ্ঞাত , এনএএন এবং ইনফিনিটি হ'ল প্রিনিটাইটিজযুক্ত "সুপারগ্লোবাল" ভেরিয়েবলগুলির নাম they এগুলি রান-টাইমে আরম্ভ করা হয় এবং একই নামগুলির সাথে সাধারণ গ্লোবাল বা স্থানীয় ভেরিয়েবল দ্বারা ওভাররাইড করা যায়।

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

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

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

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

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)


8

TL; ড

nullভেরিয়েবল সেট করার জন্য ব্যবহার করুন আপনি জানেন এটি একটি অবজেক্ট।

undefinedভেরিয়েবল সেট করার জন্য ব্যবহার করুন যার প্রকারটি মিশ্রিত।


এটি আমার 5 টি প্রাথমিক এবং অবজেক্টের ধরণের উভয়ই ব্যবহার এবং এটি and ব্যবহারের ক্ষেত্রে undefinedor বা এর মধ্যে পার্থক্য ব্যাখ্যা করে null

দড়ি

যদি আপনি জানেন যে একটি পরিবর্তনশীল কেবল একটি স্ট্রিং থাকে যখন সমস্ত লাইফাইসাইকেল, কনভেনশন অনুসারে, আপনি এটিকে আরম্ভ করতে পারেন, এখানে "":

("") ? true : false; // false
typeof ""; // "string";
("Hello World") ? true : false; // true
typeof "Hello World"; // "string"

সংখ্যা

যদি আপনি জানেন যে একটি চলক কেবলমাত্র একটি সংখ্যা থাকে যখন সমস্ত লাইফ সাইকেল, কনভেনশন অনুসারে, আপনি এটিকে আরম্ভ করতে পারেন, 0(বা NaNযদি 0আপনার ব্যবহারের ক্ষেত্রে গুরুত্বপূর্ণ মান হয়):

(0) ? true : false; // false
typeof 0; // "number";
(16) ? true : false; // true
typeof 16; // "number"

অথবা

(NaN) ? true : false; // false
typeof NaN; // "number";
(16) ? true : false; // true
typeof 16; // "number"

বুলিয়ান

যদি আপনি জানেন যে কোনও চলকটি কেবলমাত্র একটি বুলিয়ান থাকে যখন সমস্ত লাইফসাইকেল, কনভেনশন অনুসারে, আপনি এটিকে আরম্ভ করতে পারেন, এখানে false:

(false) ? true : false; // false
typeof false; // "boolean";
(true) ? true : false; // true
typeof true; // "boolean"

উদ্দেশ্য

যদি আপনি জানেন যে একটি চলক কেবলমাত্র একটি অবজেক্ট থাকে যখন সমস্ত লাইফসাইकल, কনভেনশন অনুসারে, আপনি এটিকে আরম্ভ করতে পারেন, এখানে null:

(null) ? true : false; // false
typeof null; // "object";
({}) ? true : false; // true
typeof {}; // "object"

দ্রষ্টব্য: নাল বন্ধ স্মার্ট ব্যবহার হ'ল একটি অবজেক্টের মিথ্যা সংস্করণ হ'ল কারণ কোনও বস্তু সর্বদা থাকে trueএবং কারণ typeof nullপ্রত্যাবর্তন হয় object। এর অর্থ typeof myVarObjectউভয় অবজেক্ট এবং নাল টাইপের জন্য সামঞ্জস্যপূর্ণ মান ফেরৎ।

সব

যদি আপনি জানেন যে কোনও ভেরিয়েবলের একটি মিশ্র প্রকার (সমস্ত লাইফাইসাইকালে যে কোনও প্রকারের) থাকে, তবে আপনি এটিকে আরম্ভ করতে পারেন, করতে undefined


7

nullএকটি বিশেষ মান যার অর্থ "কোনও মূল্য নেই"। nullএকটি বিশেষ অবজেক্ট কারণ typeof null'অবজেক্ট' রিটার্ন করে।

অন্যদিকে, এর undefinedঅর্থ হল ভেরিয়েবলটি ঘোষিত হয়নি, বা কোনও মান দেওয়া হয়নি।


2
এটি লক্ষণীয় গুরুত্বপূর্ণ, যেটির undefinedঅর্থ এই হতে পারে যে কোনও ভেরিয়েবল ঘোষিত হয়নি, তবে এটির গ্যারান্টি নেই। একটি পরিবর্তনশীল হিসাবে ঘোষণা করা যেতে পারে var thing;এবং এটি সমান হবে undefined
ইউরা

6

পার্থক্যটি বোঝার সর্বোত্তম উপায় হ'ল প্রথমে আপনার জাভাস্ক্রিপ্টের অভ্যন্তরীণ কাজগুলি সম্পর্কে মন পরিষ্কার করা এবং এর মধ্যে অর্থের পার্থক্যগুলি কেবল বোঝা:

let supervisor = "None"
    // I have a supervisor named "None"

let supervisor = null
    // I do NOT have a supervisor. It is a FACT that I do not.

let supervisor = undefined
    // I may or may not have a supervisor. I either don't know
    // if I do or not, or I am choosing not to tell you. It is
    // irrelevant or none of your business.

এই তিনটি মামলার মধ্যে অর্থের মধ্যে পার্থক্য রয়েছে এবং জাভাস্ক্রিপ্ট পরের দুটি ক্ষেত্রে দুটি পৃথক মান, nullএবং সহ পৃথক করে undefined। এই অর্থগুলি বোঝাতে আপনি এই মানগুলি স্পষ্টভাবে ব্যবহার করতে পারেন।

তাহলে জাভাস্ক্রিপ্ট-নির্দিষ্ট কিছু সমস্যাগুলি যা এই দার্শনিক ভিত্তির কারণে উত্থিত হয়?

  1. ইনিশিয়ালাইজার ব্যতীত ঘোষিত ভেরিয়েবলের মানটি পায় undefinedকারণ আপনি কখনই উদ্দেশ্যযুক্ত মানটি সম্পর্কে কিছুই বলেননি।

    let supervisor;
    assert(supervisor === undefined);
  2. কখনও সেট করা হয়নি এমন কোনও সামগ্রীর সম্পত্তি মূল্যায়ন করে undefinedকারণ কেউ কখনও সেই সম্পত্তি সম্পর্কে কিছু বলেনি।

    const dog = { name: 'Sparky', age: 2 };
    assert(dog.breed === undefined);
  3. nullএবং undefinedএকে অপরের সাথে "অনুরূপ" কারণ ব্রেন্ডন আইচ তাই বলেছিল। তবে তারা জোর দিয়ে একে অপরের সমান নয়।

    assert(null == undefined);
    assert(null !== undefined);
  4. nullএবং undefinedকৃতজ্ঞতার সাথে বিভিন্ন ধরণের আছে। nullটাইপ জন্যে Nullএবং undefinedটাইপ Undefined। এটি অনুমান করা হয়, তবে typeofআমি কখনওই জানতাম না যে অদ্ভুততার জন্য যা আমি এখানে পুনরায় বলব না।

  5. কোনও ফাংশন সুস্পষ্ট রিটার্ন স্টেটমেন্ট ছাড়াই তার দেহের শেষ প্রান্তে পৌঁছায় undefinedযেহেতু আপনি কী ফিরে এসেছেন সে সম্পর্কে কিছুই জানেন না।

যাইহোক, জাভাস্ক্রিপ্টে "কিছুই নয়" এর অন্যান্য রূপ রয়েছে (দর্শনশাস্ত্র অধ্যয়ন করা ভাল) ....

  • NaN
  • এমন ভেরিয়েবল ব্যবহার করে যা কখনই ঘোষণা করা হয়নি এবং গ্রহণযোগ্য একটি ReferenceError
  • এর অস্থায়ী ডেড জোনে একটি letবা constসংজ্ঞায়িত স্থানীয় ভেরিয়েবল ব্যবহার এবং একটি প্রাপ্তিReferenceError
  • ফাঁকা অ্যারেতে খালি কোষ cells হ্যাঁ এগুলি অপরিজ্ঞাত সাথে undefinedতুলনা ===করা হলেও এটি নয় not

    $ node
    > const a = [1, undefined, 2]
    > const b = [1, , 2]
    > a
    [ 1, undefined, 2 ]
    > b
    [ 1, <1 empty item>, 2 ]

সেরা উত্তর! উত্তর অধিকাংশই সত্য যে আপনি পারেন উপেক্ষা হিসাবে একটি ভেরিয়েবলের মান নির্ধারণundefined মত, let supervisor = undefinedকেস।
জে ব্রুনি

আপনাকে ধন্যবাদ, এবং হ্যাঁ, এই ভ্রান্ত ধারণাটি যে undefinedকেবলমাত্র তখনই তা ঘোষণা করা হয় নি বা এখনও তার কোনও মূল্য দেওয়া হয়নি এমনটি হ'ল এতো বিস্তৃত এবং লোকের কাছে পৌঁছানো সত্যিই কঠিন (যদিও আমি চেষ্টা চালিয়ে যাচ্ছি)। তাই অনেক মানুষ উভয় থাকার জন্য জাভাস্ক্রিপ্ট ট্র্যাশে nullএবং undefinedকিন্তু এই মান না সম্পূর্ণরূপে স্বতন্ত্র অর্থ আছে এবং অধিকাংশ অংশ জন্য তারা তাদের উদ্দেশ্যে অর্থ (অবশ্যই এই প্রোগ্রামটিতে) সঙ্গে ভাল কাজ।
রায় তোয়াল

5

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

আমাদের সহজ ফাংশন আছে বলে দিন

 function test(a) {

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

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

এখন আমরা যখন প্যারামিটারটি পাস না করে এই ফাংশনটি কল করি

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

এছাড়াও

var a;
alert(typeof a); 

এটি অপরিশোধিত দেবে; আমরা একটি ভেরিয়েবল ঘোষণা করেছি তবে আমরা এই ভেরিয়েবলের কোনও মূল্য স্বাক্ষর করি নি; তবে আমরা যদি লিখি

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

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


প্রতীকটি একটি নতুন আদিম ধরণ :)
আলেকজান্ডার মিলস

4

জন্য undefinedধরন, সেখানে এক এবং একমাত্র একটি মান হল: undefined

জন্য nullধরন, সেখানে এক এবং একমাত্র একটি মান হল: null

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

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

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

বা:

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

প্রকৃতপক্ষে, nullএকটি বিশেষ কীওয়ার্ড , শনাক্তকারী নয়, এবং সুতরাং আপনি এটিকে নির্ধারণের জন্য এটি পরিবর্তনশীল হিসাবে বিবেচনা করতে পারবেন না।

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

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

foo();

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

foo();

4

আপনি যখন জাভাস্ক্রিপ্টে কোনও ভেরিয়েবল ঘোষণা করেন, তখন এটির মান নির্ধারিত হয় undefined। এর অর্থ হল ভেরিয়েবলটি অচ্ছুত এবং ভবিষ্যতে কোনও মান নির্ধারিত হতে পারে। এটি এও বোঝায় যে ঘোষণার সময় আপনি এই ভেরিয়েবলটি যে মানটি ধরে রাখতে চলেছেন তা আপনি জানেন না।

এখন আপনি স্পষ্টভাবে একটি ভেরিয়েবল বরাদ্দ করতে পারেন null । এর অর্থ হল ভেরিয়েবলের কোনও মূল্য নেই। উদাহরণস্বরূপ - কিছু মানুষের মাঝের নাম নেই। সুতরাং এই জাতীয় ক্ষেত্রে কোনও ব্যক্তির অবজেক্টের মিডলনেম ভেরিয়েবলের মান নাল নির্ধারণ করা ভাল।

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


3

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

var a = null;

একটি সূচনা এবং সংজ্ঞায়িত করা হয়।

typeof(a)
//object

নাল হল জাভাস্ক্রিপ্টের একটি অবজেক্ট

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

var b;

খ অনির্ধারিত এবং অবিচ্ছিন্ন

অপরিজ্ঞাত অবজেক্টের বৈশিষ্ট্যগুলিও অপরিজ্ঞাত। উদাহরণস্বরূপ "x" অবজেক্ট সি-তে সংজ্ঞায়িত করা হয়নি এবং আপনি স xx অ্যাক্সেস করার চেষ্টা করলে এটি অপরিবর্তিত ফিরে আসবে।

সাধারণত আমরা ভেরিয়েবলগুলিকে নাল নির্ধারণ করি না সংজ্ঞায়িত।


1
Object.prototype.toString.call(null); // "[object Null]"
পল এস

3

এই বিষয় নিয়ে রায়ান মোরের পুরো নিবন্ধটি ...

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

নাল এবং অপরিজ্ঞাত চিরস্থায়ী অতল অন্বেষণ দেখুন


3

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

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

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

তথ্যসূত্র: http://www.thesstech.com/javascript/null-and-und परिभाषित


3

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

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

তবে আপনি যদি ==নীচের মতো এগুলি পরীক্ষা করেন তবে দেখবেন সেগুলি উভয়ই মিথ্যা :

null==undefined; //true

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

আমি আপনার জন্য এক নজরে পার্থক্যগুলি দেখানোর জন্য একটি দ্রুত চিত্র তৈরি করি।

নাল এবং অপরিজ্ঞাত


2

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


2

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

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

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

উভয়ই একই তবে ব্যবহার এবং অর্থ পৃথক।


2

আমি এর মধ্যে একটি খুব সূক্ষ্ম পার্থক্য যুক্ত করতে চাই nullএবং undefinedযেটি আপনি যখন ভেনিলা জাভাস্ক্রিপ্ট (জেএস) ভিত্তি থেকে শিখার চেষ্টা করছেন তখন তা জেনে রাখা ভাল:

  • nullজেএস-এ একটি সংরক্ষিত কীওয়ার্ড যেখানে undefinedআপনি রান-টাইম পরিবেশের বিশ্বব্যাপী অবজেক্টে পরিবর্তনশীল।

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

var null = 'foo'

এটি নীচে ত্রুটি দেয়:

আনকাচড সিনট্যাক্স এরিয়ার: অপ্রত্যাশিত টোকেন নাল

নীচের কোডটি সফলভাবে চলে তবে আমি বাস্তব জীবনে এমনটি করার পরামর্শ দিচ্ছি না:

var undefined = 'bar'

এটি কাজ করে কারণ undefinedবিশ্বব্যাপী অবজেক্টে একটি পরিবর্তনশীল (ক্লায়েন্ট-সাইড জেএসের ক্ষেত্রে ব্রাউজার উইন্ডো অবজেক্ট)


1
undefined='bar'সত্যই কোনও মান নির্ধারণ করে না undefined(যা অপরিবর্তনীয়), এটি কেবল বিভ্রান্তিকরভাবে কোনও ত্রুটি ফেলে দেয় না।
দিমিত্রি জইতসেভ

1

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


এই উত্তরটি বিভ্রান্তিমূলক ... গৃহীত উত্তরে আলোচনাটি দেখুন। বটম লাইন - null==undefinedহয় trueশুধুমাত্র অন্তর্নিহিত কাস্টিং (অথবা জাতীয় মধ্যে সমতুল্য শব্দ) কারণে। স্পষ্টতই, null===undefinedহয় falseকারণ ব্যবহার যখন আপনি ব্যবহার ===এটা তুলনা টাইপ পাশাপাশি।
লোকারাড

1

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

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

        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 পাবেন । এটি অপরিজ্ঞাত এবং নাল মধ্যে প্রধান পার্থক্য


1

নাল - এটি একটি অ্যাসাইনমেন্ট মান, যা ভেরিয়েবলের সাথে কোনও মান উপস্থাপন করতে ব্যবহৃত হয় (এটি কোনও বস্তু)।

অপরিজ্ঞাত - এটি একটি পরিবর্তনশীল যা এর জন্য নির্ধারিত কোনও মান রাখে না, সুতরাং জাভাস্ক্রিপ্ট এটিতে একটি অপরিজ্ঞাত বরাদ্দ করবে (এটি একটি ডেটা টাইপ)।

অঘোষিত - যদি কোনও ভেরিয়েবলটি তৈরি না হয় তবে তা অঘোষিত হিসাবে পরিচিত।


1

এটা দেখ. আউটপুট হাজার শব্দ মূল্য।

var b1 = document.getElementById("b1");

checkif("1, no argument"                        );
checkif("2, undefined explicitly",     undefined);
checkif("3, null explicitly",               null);
checkif("4, the 0",                            0);
checkif("5, empty string",                    '');
checkif("6, string",                    "string");
checkif("7, number",                      123456);

function checkif (a1, a2) {
	print("\ncheckif(), " + a1 + ":");
	if (a2 == undefined) {
		print("==undefined:    YES");
	} else {
		print("==undefined:    NO");
	}
	if (a2 === undefined) {
		print("===undefined:   YES");
	} else {
		print("===undefined:   NO");
	}
	if (a2 == null) {
		print("==null:         YES");
	} else {
		print("==null:         NO");
	}
	if (a2 === null) {
		print("===null:        YES");
	} else {
		print("===null:        NO");
	}
	if (a2 == '') {
		print("=='':           YES");
	} else {
		print("=='':           NO");
	}
	if (a2 === '') {
		print("==='':          YES");
	} else {
		print("==='':          NO");
	}
	if (isNaN(a2)) {
		print("isNaN():        YES");
	} else {
		print("isNaN():        NO");
	}
	if (a2) {
		print("if-?:           YES");
	} else {
		print("if-?:           NO");
	}
		print("typeof():       " + typeof(a2));
}

function print(v) {
	b1.innerHTML += v + "\n";
}
<!DOCTYPE html>
<html>
<body>
<pre id="b1"></pre>
</body>
</html>

আরো দেখুন:

চিয়ার্স!


1
এই থেকে আমি আসলে যে শিখেছি isNaN(null)আয় falseযা আমাকে বিস্মিত -।
জে ব্রুনি

0

দুটি বিশেষ মানই একটি খালি অবস্থা বোঝায়।

মূল পার্থক্য হল অনির্ধারিত , একটি পরিবর্তনশীল যা এখনও সক্রিয়া করা হয় নি মান প্রতিনিধিত্ব করে যখন নাল একটি বস্তুর একটি ইচ্ছাকৃত অনুপস্থিতি প্রতিনিধিত্ব করে।

ভেরিয়েবল নম্বরটি সংজ্ঞায়িত করা হয়, তবে প্রাথমিক মান দিয়ে বরাদ্দ করা হয় না:

let number;
number; // => undefined

সংখ্যা ভেরিয়েবল অপরিজ্ঞাত, যা স্পষ্টতই একটি অনির্দেশিত ভেরিয়েবল নির্দেশ করে

অ-বিদ্যমান বস্তুর সম্পত্তি অ্যাক্সেস করা হলে একই অবিচ্ছিন্ন ধারণাটি ঘটে:

const obj = { firstName: 'Dmitri' };
obj.lastName; // => undefined

যেহেতু লাস্টনাম সম্পত্তিটি অজগতে বিদ্যমান নয়, জাভাস্ক্রিপ্ট সঠিকভাবে Ob.lastName নির্ধারণ করে ef

অন্যান্য ক্ষেত্রে, আপনি জানেন যে একটি পরিবর্তনশীল কোনও বস্তু বা কোনও ফাংশন ধরে রাখার জন্য প্রত্যাশাকে প্রত্যাশা করে। তবে কিছু কারণে, আপনি বস্তুটি ইনস্ট্যান্ট করতে পারবেন না can't এ জাতীয় ক্ষেত্রে নাল হ'ল একটি অনুপস্থিত বস্তুর অর্থবহ সূচক।

উদাহরণস্বরূপ, ক্লোন () এমন একটি ফাংশন যা একটি সাধারণ জাভাস্ক্রিপ্ট অবজেক্টকে ক্লোন করে। ফাংশনটি কোনও বস্তু ফেরত প্রত্যাশিত:

function clone(obj) {
  if (typeof obj === 'object' && obj !== null) {
    return Object.assign({}, obj);
  }
  return null;
}
clone({name: 'John'}); // => {name: 'John'}
clone(15);             // => null
clone(null);           // => null

তবে, ক্লোন () একটি অ-অবজেক্ট আর্গুমেন্টের সাথে আহ্বান করা হতে পারে: 15 বা নাল (বা সাধারণত একটি আদিম মান, নাল বা অপরিজ্ঞাত)। এই ক্ষেত্রে, ফাংশনটি একটি ক্লোন তৈরি করতে পারে না, সুতরাং এটি নাল ফেরায় - অনুপস্থিত কোনও বস্তুর সূচক।

typof অপারেটর দুটি মানের মধ্যে পার্থক্য তৈরি করে:

typeof undefined; // => 'undefined'
typeof null;      // => 'object'

কঠোর মানের অপারেটর === নাল থেকে অপরিজ্ঞাতকে সঠিকভাবে পৃথক করে:

let nothing = undefined;
let missingObject = null;
nothing === missingObject; // => false

0

একটি পৃথক অর্থ ছাড়াও অন্যান্য পার্থক্য রয়েছে:

  1. অবজেক্ট ডেস্ট্রাকচারিং এই দুটি মানের জন্য আলাদাভাবে কাজ করে:
    const { a = "default" } = { a: undefined }; // a is "default"
    const { b = "default" } = { b: null };      // b is null
  2. JSON.stringify () রাখে nullকিন্তু বাদ দেয়undefined
    const json = JSON.stringify({ undefinedValue: undefined, nullValue: null });
    console.log(json); // prints {"nullValue":null}
  3. টাইপফোন অপারেটর
    console.log(typeof undefined); // "undefined"
    console.log(typeof null);      // "object" instead of "null"

-2

যদি কোনও ভেরিয়েবলটি আরম্ভ করা না হয় তবে এটি অপরিজ্ঞাত। অপরিজ্ঞাত কোনও বস্তু নয়। উদাহরণ: var MyName; কনসোল.লগ (টাইপফাই মাইনেম);

বিকাশ সরঞ্জামটিতে কনসোল লগ পরীক্ষা করুন, এটি অপরিজ্ঞাত হিসাবে মুদ্রিত হবে।

নাল আ আ বস্তু। আপনি যদি কিছু ভেরিয়েবল নাল হতে চান তবে নালটি ব্যবহার করা হয় ull নূনক ভেরিয়েবল বিদ্যমান তবে মান জানা যায় না gram এটি ব্যাকরণযোগ্য প্রো ব্যাকরণিকভাবে বরাদ্দ করা উচিত। নাল স্বয়ংক্রিয়ভাবে আরম্ভ হয় না।

উদাহরণ: var MyName = নাল; কনসোল.লগ (টাইপফাই মাইনেম); বিকাশ সরঞ্জামে কনসোল লগ চেক করুন, এটি একটি বস্তু হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.