আমি জাভাস্ক্রিপ্ট মধ্যে null
এবং পার্থক্য কি জানতে চাই undefined
।
null
আপনি কি এটি খালি সেট করেছেন, undefined
এটি খালি কারণ এটি সেট করা হয়নি। বা null
উদ্দেশ্য ফাঁকা, undefined
এখনও খালি। মূলত এটি অভিপ্রায় দেখায়।
আমি জাভাস্ক্রিপ্ট মধ্যে null
এবং পার্থক্য কি জানতে চাই undefined
।
null
আপনি কি এটি খালি সেট করেছেন, undefined
এটি খালি কারণ এটি সেট করা হয়নি। বা null
উদ্দেশ্য ফাঁকা, undefined
এখনও খালি। মূলত এটি অভিপ্রায় দেখায়।
উত্তর:
জাভাস্ক্রিপ্টে, এর 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'
অপরিবর্তিত মান হ'ল একটি আদিম মান যখন কোনও ভেরিয়েবলকে কোনও মূল্য নির্ধারিত না করা হয় 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
সাবস্ক্রিপ্ট বা অস্তিত্ব নেই এমন সদস্য পড়ার সময় আপনি অপরিজ্ঞাত ফেরত পাবেন।
নাল এবং অপরিবর্তিতের মধ্যে পার্থক্য হ'ল: জাভাস্ক্রিপ্ট কখনই কোনও কিছুই বাতিল করে দেয় না, যা আমরা সাধারণত করি। যদিও আমরা ভেরিয়েবলগুলি অপরিজ্ঞাত স্থলে সেট করতে পারি, আমরা নাল পছন্দ করি কারণ এটি আমাদের পক্ষে কখনও করা হয় না। আপনি যখন ডিবাগ করছেন তখন এর অর্থ হ'ল শূন্য থাকাতে সেট করা কোনও কিছুই আপনার নিজের কাজ এবং জাভাস্ক্রিপ্টের নয়। এর বাইরেও, এই দুটি বিশেষ মান প্রায় সমতুল্য।
নাল একটি বিশেষ কীওয়ার্ড যা মানটির অনুপস্থিতি নির্দেশ করে।
একটি মান হিসাবে এটি সম্পর্কে চিন্তা করুন:
অপরিজ্ঞাত সম্পত্তি নির্দেশ করে যে একটি চলক নালও সহ একটি মান বরাদ্দ করা হয়নি। মত
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
null
একেবারে একটি ডেটা টাইপ: এমএসডিএন.মাইক্রোসফট /en-us/library/ie/7wkd9z69(v=vs.94).aspx। সত্য যে typeof null
আয় object
করে পিছন-সঙ্গতির জন্য রয়ে গেছে এর নাম ECMAScript প্রথম সংস্করণে উপস্থিত একটি সুপরিচিত এবং নথিভুক্ত বাগ সংশোধন করা হয়। আপনি যে মন্তব্যটি আসলে আপনার মন্তব্যে পোস্ট করেছেন সেটি পৃষ্ঠার অর্ধেকটা নীচে "টাইপফুল নাল // অবজেক্ট (ECMAScript এ বাগ, নাল হওয়া উচিত)" নীচে লিখেছেন! সুতরাং দয়া করে, ডাউন-ভোটে মন্তব্য করার আগে কিছু অনুসন্ধানের প্রচেষ্টা দেখান
নাল : একটি পরিবর্তনশীল জন্য মান অনুপস্থিত; অপরিশোধিত : নিজেই পরিবর্তনশীল অনুপস্থিত;
.. যেখানে ভেরিয়েবল একটি মান সঙ্গে যুক্ত একটি প্রতীকী নাম।
জাতীয় সঙ্গে পরোক্ষভাবে init সদ্য ঘোষিত ভেরিয়েবল প্রতি সদয় যথেষ্ট হতে পারে নাল , কিন্তু এটা না।
var a = {}; a.n = undefined;' then ..
a.hasOwnProperty ('n') == সত্য` ... সুতরাং ভেরিয়েবলের অনুপস্থিতি বলা এখন আর সঠিক নয়
যত্নসহকারে নিম্নলিখিত অনুগ্রহ করে পড়ুন। এটি জাভাস্ক্রিপ্টে নাল এবং অপরিজ্ঞাত মধ্যে পার্থক্য সম্পর্কিত আপনার সমস্ত সন্দেহ দূর করবে । এছাড়াও আপনি ধরণের সঠিকভাবে নির্ধারণ করতে নীচে প্রদত্ত ইউটিলিটি ফাংশনটি ব্যবহার করতে পারেন।
জাভাস্ক্রিপ্টে আমাদের নিম্নলিখিত ধরণের ভেরিয়েবল থাকতে পারে।
নিম্নলিখিত প্রতিটি একের পর এক ঘটনা ব্যাখ্যা করে
অঘোষিত ভেরিয়েবল : নিম্নলিখিতটি অঘোষিত ভেরিয়েবলগুলির জন্য সত্য holds
ঘোষিত তবে স্বাক্ষরিত চলকগুলি
আক্ষরিক অনির্দিষ্ট সংজ্ঞাযুক্ত ভেরিয়েবলগুলি : এই ভেরিয়েবলগুলি ঘোষিত তবে স্বাক্ষরিত ভেরিয়েবলগুলির মতো একইরকম আচরণ করা হয় ।
আক্ষরিক নাল দিয়ে বরাদ্দ করা চলক
ভেরিয়েবল ছাড়া অন্য যেকোন সহ নির্ধারিত অনির্ধারিত বা নাল
নিম্নলিখিতটি ভেরিয়েবলের সঠিক ধরণের পরীক্ষার জন্য অ্যালগরিদম সরবরাহ করে:
প্রকার নির্ধারণের জন্য আপনি নিম্নলিখিত ইউটিলিটি ফাংশনটিও ব্যবহার করতে পারেন। এটি বর্তমানে সমস্ত ইসিএমএ 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
এবং Uncaught ReferenceError
:
1 - Uncaught ReferenceError
: পরিবর্তনশীল ঘোষণা করা হয়নি আপনার স্ক্রিপ্টের মধ্যে, এই varaible কোন রেফারেন্স
2 - undefined
: পরিবর্তনশীল ঘোষিত কিন্তু ইনিশিয়ালাইজ না
3 - null
: চলক ঘোষণা করে এবং একটি খালি মান
নাল এবং অপরিজ্ঞাত দুটি স্বতন্ত্র অবজেক্টের ধরণের যা নিম্নলিখিতগুলির মধ্যে মিল রয়েছে:
==
এবং !=
অপারেটর দ্বারা অন্য কিছুই হিসাবে বিবেচিত হয় না ।মিলগুলি এখানেই শেষ। একবারের জন্য কীভাবে কীওয়ার্ডগুলি নাল এবং অপরিজ্ঞাতভাবে প্রয়োগ করা হয় তার মধ্যে একটি মৌলিক পার্থক্য রয়েছে । এটি সুস্পষ্ট নয়, তবে নিম্নলিখিত উদাহরণটি বিবেচনা করুন:
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)
।
TL; ড
null
ভেরিয়েবল সেট করার জন্য ব্যবহার করুন আপনি জানেন এটি একটি অবজেক্ট।
undefined
ভেরিয়েবল সেট করার জন্য ব্যবহার করুন যার প্রকারটি মিশ্রিত।
এটি আমার 5 টি প্রাথমিক এবং অবজেক্টের ধরণের উভয়ই ব্যবহার এবং এটি and ব্যবহারের ক্ষেত্রে undefined
or বা এর মধ্যে পার্থক্য ব্যাখ্যা করে 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
।
null
একটি বিশেষ মান যার অর্থ "কোনও মূল্য নেই"। null
একটি বিশেষ অবজেক্ট কারণ typeof null
'অবজেক্ট' রিটার্ন করে।
অন্যদিকে, এর undefined
অর্থ হল ভেরিয়েবলটি ঘোষিত হয়নি, বা কোনও মান দেওয়া হয়নি।
undefined
অর্থ এই হতে পারে যে কোনও ভেরিয়েবল ঘোষিত হয়নি, তবে এটির গ্যারান্টি নেই। একটি পরিবর্তনশীল হিসাবে ঘোষণা করা যেতে পারে var thing;
এবং এটি সমান হবে undefined
।
পার্থক্যটি বোঝার সর্বোত্তম উপায় হ'ল প্রথমে আপনার জাভাস্ক্রিপ্টের অভ্যন্তরীণ কাজগুলি সম্পর্কে মন পরিষ্কার করা এবং এর মধ্যে অর্থের পার্থক্যগুলি কেবল বোঝা:
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
। এই অর্থগুলি বোঝাতে আপনি এই মানগুলি স্পষ্টভাবে ব্যবহার করতে পারেন।
তাহলে জাভাস্ক্রিপ্ট-নির্দিষ্ট কিছু সমস্যাগুলি যা এই দার্শনিক ভিত্তির কারণে উত্থিত হয়?
ইনিশিয়ালাইজার ব্যতীত ঘোষিত ভেরিয়েবলের মানটি পায় undefined
কারণ আপনি কখনই উদ্দেশ্যযুক্ত মানটি সম্পর্কে কিছুই বলেননি।
let supervisor;
assert(supervisor === undefined);
কখনও সেট করা হয়নি এমন কোনও সামগ্রীর সম্পত্তি মূল্যায়ন করে undefined
কারণ কেউ কখনও সেই সম্পত্তি সম্পর্কে কিছু বলেনি।
const dog = { name: 'Sparky', age: 2 };
assert(dog.breed === undefined);
null
এবং undefined
একে অপরের সাথে "অনুরূপ" কারণ ব্রেন্ডন আইচ তাই বলেছিল। তবে তারা জোর দিয়ে একে অপরের সমান নয়।
assert(null == undefined);
assert(null !== undefined);
null
এবং undefined
কৃতজ্ঞতার সাথে বিভিন্ন ধরণের আছে। null
টাইপ জন্যে Null
এবং undefined
টাইপ Undefined
। এটি অনুমান করা হয়, তবে typeof
আমি কখনওই জানতাম না যে অদ্ভুততার জন্য যা আমি এখানে পুনরায় বলব না।
কোনও ফাংশন সুস্পষ্ট রিটার্ন স্টেটমেন্ট ছাড়াই তার দেহের শেষ প্রান্তে পৌঁছায় 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
কিন্তু এই মান না সম্পূর্ণরূপে স্বতন্ত্র অর্থ আছে এবং অধিকাংশ অংশ জন্য তারা তাদের উদ্দেশ্যে অর্থ (অবশ্যই এই প্রোগ্রামটিতে) সঙ্গে ভাল কাজ।
জাভাস্রিপিতে স্ট্রিং, নাম্বার, বুলিয়ান, নাল এবং অপরিজ্ঞাত ৫ টি আদিম ডেটা রয়েছে। আমি কিছু সাধারণ উদাহরণ দিয়ে ব্যাখ্যা করার চেষ্টা করব
আমাদের সহজ ফাংশন আছে বলে দিন
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
সুতরাং নাল একটি বস্তু। একটি উপায়ে আমরা 'এ' এর জন্য একটি মান নাল বরাদ্দ করেছি
জন্য 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();
আপনি যখন জাভাস্ক্রিপ্টে কোনও ভেরিয়েবল ঘোষণা করেন, তখন এটির মান নির্ধারিত হয় undefined
। এর অর্থ হল ভেরিয়েবলটি অচ্ছুত এবং ভবিষ্যতে কোনও মান নির্ধারিত হতে পারে। এটি এও বোঝায় যে ঘোষণার সময় আপনি এই ভেরিয়েবলটি যে মানটি ধরে রাখতে চলেছেন তা আপনি জানেন না।
এখন আপনি স্পষ্টভাবে একটি ভেরিয়েবল বরাদ্দ করতে পারেন null
। এর অর্থ হল ভেরিয়েবলের কোনও মূল্য নেই। উদাহরণস্বরূপ - কিছু মানুষের মাঝের নাম নেই। সুতরাং এই জাতীয় ক্ষেত্রে কোনও ব্যক্তির অবজেক্টের মিডলনেম ভেরিয়েবলের মান নাল নির্ধারণ করা ভাল।
এখন ধরুন যে কেউ আপনার ব্যক্তির বস্তুর মিডলনেম ভেরিয়েবল অ্যাক্সেস করছে এবং এর মান রয়েছে undefined
। বিকাশকারী এই পরিবর্তনশীলটি আরম্ভ করতে ভুলে গিয়েছিলেন বা এর কোনও মূল্য নেই কিনা তা তিনি জানতেন না। যদি এর মান থাকে null
তবে ব্যবহারকারী সহজেই অনুমান করতে পারবেন যে মিডলনামের কোনও মূল্য নেই এবং এটি কোনও ছোঁয়াচে পরিবর্তনশীল নয়।
নাল এবং অপরিজ্ঞাত উভয়ই কিছু মান অনুপস্থিতি প্রতিনিধিত্ব করতে ব্যবহৃত হয়।
var a = null;
একটি সূচনা এবং সংজ্ঞায়িত করা হয়।
typeof(a)
//object
নাল হল জাভাস্ক্রিপ্টের একটি অবজেক্ট
Object.prototype.toString.call(a) // [object Object]
var b;
খ অনির্ধারিত এবং অবিচ্ছিন্ন
অপরিজ্ঞাত অবজেক্টের বৈশিষ্ট্যগুলিও অপরিজ্ঞাত। উদাহরণস্বরূপ "x" অবজেক্ট সি-তে সংজ্ঞায়িত করা হয়নি এবং আপনি স xx অ্যাক্সেস করার চেষ্টা করলে এটি অপরিবর্তিত ফিরে আসবে।
সাধারণত আমরা ভেরিয়েবলগুলিকে নাল নির্ধারণ করি না সংজ্ঞায়িত।
Object.prototype.toString.call(null); // "[object Null]"
এই বিষয় নিয়ে রায়ান মোরের পুরো নিবন্ধটি ...
"সাধারণত, যদি আপনাকে কোনও ভেরিয়েবল বা সম্পত্তির জন্য কোনও অ-মান দেওয়া প্রয়োজন হয় তবে এটি কোনও ফাংশনে পাস করতে হবে বা কোনও ফাংশন থেকে ফিরিয়ে দিতে হবে, প্রায় সর্বদা সেরা বিকল্প। এটি সহজভাবে বলতে গেলে, জাভাস্ক্রিপ্ট অপরিজ্ঞাত এবং প্রোগ্রামার ব্যবহার করে নাল ব্যবহার করুন। "
জাভাস্ক্রিপ্টে নাল এবং অপরিজ্ঞাত উভয়ই মানটির অনুপস্থিতি নির্দেশ করে।
var a = null; //variable assigned null value var b; // undefined
সত্য সত্ত্বেও উভয়ই মূল্যের অনুপস্থিতির জন্য বিদ্যমান তবে: অপরিবর্তিত প্রকৃত অর্থ ভেরিয়েবলটি আরম্ভ হয় না। যে ক্রিয়াকলাপগুলি কিছুই ফিরিয়ে দেয় না এবং ফাংশন পরামিতি যার জন্য কোনও মান সরবরাহ করা হয় না, অপরিবর্তিত মান ফিরে আসে। নাল এবং অপরিজ্ঞাত মধ্যে পার্থক্য করতে কঠোর সমতা অপারেটর === ব্যবহার করুন।
তথ্যসূত্র: http://www.thesstech.com/javascript/null-and-und परिभाषित
ঠিক আছে, আমরা বিভ্রান্ত করতে পারে পেতে যখন আমরা সম্পর্কে শুনতে null
এবং undefined
কিন্তু আসুন শুরু এটা সহজ, তারা উভয় falsy এবং নানাভাবে অনুরূপ, কিন্তু জাভাস্ক্রিপ্ট অদ্ভুত অংশ, তাদের উল্লেখযোগ্য পার্থক্য দুয়েক করা, উদাহরণস্বরূপ, typeof null
হয় 'object'
যখন typeof undefined
হয় 'undefined'
।
typeof null; //"object"
typeof undefined; //"undefined";
তবে আপনি যদি ==
নীচের মতো এগুলি পরীক্ষা করেন তবে দেখবেন সেগুলি উভয়ই মিথ্যা :
null==undefined; //true
এছাড়াও আপনি null
কোনও বস্তুর সম্পত্তি বা কোনও আদিমকে অর্পণ করতে পারেন , যখন undefined
কোনও কিছু বরাদ্দ না করে কেবল অর্জন করা যায়।
আমি আপনার জন্য এক নজরে পার্থক্যগুলি দেখানোর জন্য একটি দ্রুত চিত্র তৈরি করি।
টাইপফ যেমন অনির্ধারিত ফেরত দেয়, অপরিজ্ঞাত এমন এক প্রকার যেখানে নাল হ'ল একটি প্রারম্ভিকরূপ কোনও বস্তুর ভেরিয়েবল পয়েন্টগুলি নির্দেশ করে (কার্যত জাভাস্ক্রিপ্টের প্রতিটি জিনিসই একটি বস্তু)।
জাভাস্ক্রিপ্টে সমস্ত ভেরিয়েবলগুলি মূল মান জোড়া হিসাবে সংরক্ষণ করা হয়। প্রতিটি ভেরিয়েবল ভেরিয়েবল_নাম: ভেরিয়েবল_মূল্য / রেফারেন্স হিসাবে সংরক্ষণ করা হয় ।
অনির্দিষ্ট অর্থ একটি ভেরিয়েবলকে মেমরিতে একটি স্থান দেওয়া হয়েছিল, তবে এর সাথে কোনও মান নির্ধারিত হয় না। সেরা অনুশীলন হিসাবে, আপনি এই ধরণের অ্যাসাইনমেন্ট হিসাবে ব্যবহার করবেন না।
সেক্ষেত্রে আপনি যখন কোডটির পরবর্তী বিন্দুতে কোনও ভেরিয়েবলের মূল্য ছাড়াই চান তখন কীভাবে তা চিহ্নিত করবেন? আপনি নাল টাইপটি ব্যবহার করতে পারেন , এটি একই ধরণের যা একই জিনিসটি নির্ধারণ করতে ব্যবহৃত হয়, একটি মানের অনুপস্থিতি, তবে এটি অপরিবর্তিত হিসাবে একই নয়, এই ক্ষেত্রে আপনার স্মৃতিতে আসলে মূল্য রয়েছে। যে মান নাল
উভয়ই একই তবে ব্যবহার এবং অর্থ পৃথক।
আমি এর মধ্যে একটি খুব সূক্ষ্ম পার্থক্য যুক্ত করতে চাই null
এবং undefined
যেটি আপনি যখন ভেনিলা জাভাস্ক্রিপ্ট (জেএস) ভিত্তি থেকে শিখার চেষ্টা করছেন তখন তা জেনে রাখা ভাল:
null
জেএস-এ একটি সংরক্ষিত কীওয়ার্ড যেখানে undefined
আপনি রান-টাইম পরিবেশের বিশ্বব্যাপী অবজেক্টে পরিবর্তনশীল।কোড লেখার সময়, এই পার্থক্যটি উভয়ই হিসাবে চিহ্নিতযোগ্য নয় null
এবং undefined
সর্বদা একটি জাভাস্ক্রিপ্ট স্টেটমেন্টের আরএইচএসে ব্যবহৃত হয়। তবে আপনি যখন এটিকে কোনও অভিব্যক্তির এলএইচএসে ব্যবহার করেন তখন আপনি সহজেই এই পার্থক্যটি পর্যবেক্ষণ করতে পারেন। সুতরাং জেএস ইন্টারপ্রেটার নীচের কোডটিকে ত্রুটি হিসাবে ব্যাখ্যা করে:
var null = 'foo'
এটি নীচে ত্রুটি দেয়:
আনকাচড সিনট্যাক্স এরিয়ার: অপ্রত্যাশিত টোকেন নাল
নীচের কোডটি সফলভাবে চলে তবে আমি বাস্তব জীবনে এমনটি করার পরামর্শ দিচ্ছি না:
var undefined = 'bar'
এটি কাজ করে কারণ undefined
বিশ্বব্যাপী অবজেক্টে একটি পরিবর্তনশীল (ক্লায়েন্ট-সাইড জেএসের ক্ষেত্রে ব্রাউজার উইন্ডো অবজেক্ট)
undefined='bar'
সত্যই কোনও মান নির্ধারণ করে না undefined
(যা অপরিবর্তনীয়), এটি কেবল বিভ্রান্তিকরভাবে কোনও ত্রুটি ফেলে দেয় না।
মধ্যে পার্থক্য undefined
এবং null
সংক্ষিপ্ত, কিন্তু একটি পার্থক্য আছে। এমন একটি পরিবর্তনশীল যার মান undefined
কখনই আরম্ভ করা হয়নি। একটি ভেরিয়েবল যার মান হ'ল null
সুস্পষ্টভাবে একটি মান দেওয়া হয়েছিল null
, যার অর্থ হল ভেরিয়েবলের স্পষ্টভাবে কোনও মান নেই সেট করা হয়েছিল। আপনি যদি তুলনা করেন undefined
এবং ভাবটি null
ব্যবহার করে null==undefined
, তারা সমান হবে।
null==undefined
হয় true
শুধুমাত্র অন্তর্নিহিত কাস্টিং (অথবা জাতীয় মধ্যে সমতুল্য শব্দ) কারণে। স্পষ্টতই, null===undefined
হয় false
কারণ ব্যবহার যখন আপনি ব্যবহার ===
এটা তুলনা টাইপ পাশাপাশি।
মূলত, অনির্দিষ্ট একটি বিশ্বব্যাপী পরিবর্তনশীল যে 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 পাবেন । এটি অপরিজ্ঞাত এবং নাল মধ্যে প্রধান পার্থক্য
নাল - এটি একটি অ্যাসাইনমেন্ট মান, যা ভেরিয়েবলের সাথে কোনও মান উপস্থাপন করতে ব্যবহৃত হয় (এটি কোনও বস্তু)।
অপরিজ্ঞাত - এটি একটি পরিবর্তনশীল যা এর জন্য নির্ধারিত কোনও মান রাখে না, সুতরাং জাভাস্ক্রিপ্ট এটিতে একটি অপরিজ্ঞাত বরাদ্দ করবে (এটি একটি ডেটা টাইপ)।
অঘোষিত - যদি কোনও ভেরিয়েবলটি তৈরি না হয় তবে তা অঘোষিত হিসাবে পরিচিত।
এটা দেখ. আউটপুট হাজার শব্দ মূল্য।
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>
আরো দেখুন:
চিয়ার্স!
isNaN(null)
আয় false
যা আমাকে বিস্মিত -।
দুটি বিশেষ মানই একটি খালি অবস্থা বোঝায়।
মূল পার্থক্য হল অনির্ধারিত , একটি পরিবর্তনশীল যা এখনও সক্রিয়া করা হয় নি মান প্রতিনিধিত্ব করে যখন নাল একটি বস্তুর একটি ইচ্ছাকৃত অনুপস্থিতি প্রতিনিধিত্ব করে।
ভেরিয়েবল নম্বরটি সংজ্ঞায়িত করা হয়, তবে প্রাথমিক মান দিয়ে বরাদ্দ করা হয় না:
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
একটি পৃথক অর্থ ছাড়াও অন্যান্য পার্থক্য রয়েছে:
const { a = "default" } = { a: undefined }; // a is "default"
const { b = "default" } = { b: null }; // b is null
null
কিন্তু বাদ দেয়undefined
const json = JSON.stringify({ undefinedValue: undefined, nullValue: null });
console.log(json); // prints {"nullValue":null}
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" instead of "null"
যদি কোনও ভেরিয়েবলটি আরম্ভ করা না হয় তবে এটি অপরিজ্ঞাত। অপরিজ্ঞাত কোনও বস্তু নয়। উদাহরণ: var MyName; কনসোল.লগ (টাইপফাই মাইনেম);
বিকাশ সরঞ্জামটিতে কনসোল লগ পরীক্ষা করুন, এটি অপরিজ্ঞাত হিসাবে মুদ্রিত হবে।
নাল আ আ বস্তু। আপনি যদি কিছু ভেরিয়েবল নাল হতে চান তবে নালটি ব্যবহার করা হয় ull নূনক ভেরিয়েবল বিদ্যমান তবে মান জানা যায় না gram এটি ব্যাকরণযোগ্য প্রো ব্যাকরণিকভাবে বরাদ্দ করা উচিত। নাল স্বয়ংক্রিয়ভাবে আরম্ভ হয় না।
উদাহরণ: var MyName = নাল; কনসোল.লগ (টাইপফাই মাইনেম); বিকাশ সরঞ্জামে কনসোল লগ চেক করুন, এটি একটি বস্তু হবে।
null
মান আছে