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


866

কেন জাভাস্ক্রিপ্ট nullএকটি বিবেচনা করা objectহয়?

চেক করছে

if ( object == null )
      Do something

হিসাবে একই

if ( !object )
      Do something

?

এবং আরো:

মধ্যে পার্থক্য কি nullএবং undefined?


6
শেষ প্রশ্নটি শিরোনামে যুক্ত করা হলে এটি দুর্দান্ত হবে। এখানে উত্তরগুলি দুর্দান্ত, তবে শিরোনামটি এটি নির্দেশ করতে পারে না যে আপনি এই উত্তরটি এখানে পাবেন
marcos.borunda

6
নাল জাভাস্ক্রিপ্টে কোনও অবজেক্ট নয়! typeof null === 'object'কিন্তু এটি একটি বাগ! এখানে একটি লিঙ্কটি সমস্ত ভিডিও দেখুন এবং উপভোগ করুন :)
CoR

1
আমি অনির্ধারিত এবং NULL মূল্যবান ভেরিয়েবলটি কীসের জন্য অ্যাকসিওমেটিক সত্য হিসাবে সি / সি ++ ব্যবহার করতে চাই, কারণ এটি খুব সোজা। তারপরে দেখুন কীভাবে সেই সংজ্ঞাগুলি অন্যান্য ভাষার স্পেসিফিকেশনের সাথে তুলনা করে।
সমিস

উত্তর:


1488
(name is undefined)

তুমি: কি name? (*)
Javascript: name ? কি name? আমি জানি না আপনি কী বিষয়ে কথা বলছেন। আপনি এর nameআগে কখনও উল্লেখ করেন নি। আপনি কি (ক্লায়েন্ট-) পাশের কিছু অন্যান্য স্ক্রিপ্টিং ভাষা দেখছেন?

name = null;

তুমি: কি name?
জাভাস্ক্রিপ্ট: আমি জানি না।

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

একটা জিনিষ মনে রাখা যে null, যেমন একই, নয় ধারণার দিক থেকে falseবা ""বা এই ধরনের, এমনকি যদি তারা টাইপ ঢালাই, অর্থাত্ পর সমার্থক

name = false;

তুমি: কি name?
জাভাস্ক্রিপ্ট: বুলিয়ান মিথ্যা।

name = '';

তুমি: কি name?
জাভাস্ক্রিপ্ট: খালি স্ট্রিং


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


14
তবে জাভাস্ক্রিপ্টে, খালি স্ট্রিং '' এখনও একটি বুলিয়ান মিথ্যা।
আন্দ্রে গ্রাচ

117
খালি স্ট্রিং বুলেটিয়ান মিথ্যা নয়, তবে শর্তাধীন অবস্থায় এটি মিথ্যা (y) মান (জবরদস্তি) হিসাবে ব্যাখ্যা করা হয়।
ব্রায়ান ম্যাথিউজ

22
দ্বিতীয় ক্ষেত্রে যেখানে 'আমি জানি না' এর পরিবর্তে নাম = নাল, সেখানে জাভাস্ক্রিপ্ট উত্তর দিতে পারে: নাল বস্তু। তা ছাড়া আমি উত্তরটির স্টাইলটি পছন্দ করি।
জিন ভিনসেন্ট

16
"আমি জানি না" পরিবর্তে, আমি উত্তরটি null"কিছুই না" বলব । নাল নির্ভুলভাবে কোনও মান হিসাবে সংজ্ঞায়িত করা হয়। শূন্য, শূন্য, নদা। কিছুই নেই।
মিক্ল

50
উত্তর দেওয়ার সেই স্টাইলটি পছন্দ করুন। সাধারণভাবে, "আপনি এর name আগে কখনও কোনও উল্লেখ করেননি " সত্য। যাইহোক, এটির ( var somevar;) মূল্য নির্ধারিত না করে ভেরিয়েবল ঘোষণার ফলে অবাক হওয়ার মতো অবাক হতে পারে undefined
এমসির সম্রাট

142

পার্থক্যটি এই স্নিপেটে সংক্ষিপ্ত করা যেতে পারে:

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

পরীক্ষা করা হচ্ছে

object == nullচেক করা পৃথক if ( !object )

পরেরটি সমান ! Boolean(object), কারণ অ্যানারি !অপারেটর স্বয়ংক্রিয়ভাবে ডান অপারেণ্ডকে একটি বুলিয়ানে ফেলে দেয়।

যেহেতু Boolean(null)তখন মিথ্যা সমান !false === true

তাই আপনি যদি আপনার অবজেক্ট নাল না , কিন্তু মিথ্যা বা 0 বা "" চেক কারণ পাস হবে:

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false

@ কেন্তারমিউড়া আমাদের জন্য জাভাস্ক্রিপ্ট নুবস ... সম্ভবত কেবল আমার ... এই বুলিয়ান (মান) সিনট্যাক্সটি কী? একটি বুলিয়ান কাস্টিং?
xr280xr

@ xr280xr হ্যাঁ, এটি ingালাই করছেন। String(null)কাস্টিংয়ের আরও একটি উদাহরণ দেখার চেষ্টা করুন । আপনি এমনকি মূর্খ জিনিসগুলি করতে পারেন Number(null + 2)... তবে আপনার উচিত নয় :-)। কেন্তারোমিউরা থেকে দুর্দান্ত উত্তর
স্কুইডবে

মনে রাখবেন typeofএকজন অপারেটর। আপনি যে কারণে লিখবেন না সেই কারণেই আপনি প্রথম বন্ধনীতে অপারেন্ডটি মোড়বেন না var sum = 1 +(1);
অ্যালেক্স

124

nullএটি কোনও বস্তু নয় , এটি একটি আদিম মান । উদাহরণস্বরূপ, আপনি এটিতে বৈশিষ্ট্য যুক্ত করতে পারবেন না। কখনও কখনও লোকেরা ভুলভাবে ধরে নেয় যে এটি একটি বস্তু, কারণ typeof nullফিরে আসে "object"। তবে এটি আসলে একটি বাগ (এটি এমনকি ECMAScript 6 এ সংশোধন করা যেতে পারে)।

nullএবং এর মধ্যে পার্থক্য undefinedনিম্নরূপ:

  • undefined: জাভাস্ক্রিপ্ট দ্বারা ব্যবহৃত এবং এর অর্থ "কোনও মূল্য নেই"। একীকরণবিহীন ভেরিয়েবল, অনুপস্থিত পরামিতি এবং অজানা ভেরিয়েবলের সেই মান রয়েছে।

    > var noValueYet;
    > console.log(noValueYet);
    undefined
    
    > function foo(x) { console.log(x) }
    > foo()
    undefined
    
    > var obj = {};
    > console.log(obj.unknownProperty)
    undefined

    অজানা ভেরিয়েবল অ্যাক্সেস একটি ব্যতিক্রম উত্পাদন করে:

    > unknownVariable
    ReferenceError: unknownVariable is not defined
  • null: প্রোগ্রামাররা "কোনও মূল্য নেই", উদাহরণস্বরূপ কোনও ফাংশনের প্যারামিটার হিসাবে চিহ্নিত করতে ব্যবহার করে।

একটি ভেরিয়েবল পরীক্ষা করা:

console.log(typeof unknownVariable === "undefined"); // true

var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true

var bar = null;
console.log(bar === null); // true

একটি সাধারণ নিয়ম হিসাবে আপনার জাভাস্ক্রিপ্টে সর্বদা === এবং কখনই == ব্যবহার করা উচিত (== সমস্ত ধরণের রূপান্তর সম্পাদন করে যা অপ্রত্যাশিত ফলাফল আনতে পারে)। চেক x == null, একটি প্রান্ত ক্ষেত্রে দেখা যায়, কারণ এটি উভয়ের জন্য কাজ করে nullএবং undefined:

> null == null
true
> undefined == null
true

কোনও ভেরিয়েবলের মান রয়েছে কিনা তা যাচাইয়ের একটি সাধারণ উপায় হ'ল এটিকে বুলেয়ানে রূপান্তর করা এবং এটি কিনা তা দেখুন true। এই রূপান্তরটি ifবিবৃতি এবং বুলেট অপারেটর দ্বারা সম্পাদিত হয় ! ("না").

function foo(param) {
    if (param) {
        // ...
    }
}
function foo(param) {
    if (! param) param = "abc";
}
function foo(param) {
    // || returns first operand that can't be converted to false
    param = param || "abc";
}

এই পদ্ধতির ত্রুটি: নিম্নলিখিত সমস্ত মানগুলি মূল্যায়ন করে false, তাই আপনাকে সতর্কতা অবলম্বন করতে হবে (উদাহরণস্বরূপ, উপরের চেকগুলি undefinedএবং এর মধ্যে পার্থক্য করতে পারে না 0)।

  • undefined, null
  • booleans: false
  • নাম্বার: +0, -0,NaN
  • স্ট্রিংস: ""

আপনি Booleanকোনও ফাংশন হিসাবে ব্যবহার করে বুলেয়ান রূপান্তরটি পরীক্ষা করতে পারেন (সাধারণত এটি ব্যবহারকারীর সাথে ব্যবহার করা হয় new):

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true

1
কেন রেফারেন্স +0এবং -0পৃথকভাবে যদি +0 === -0?
রায়নস

6
সম্ভবত কারণ আপনি এখনও আলাদা করতে পারেন +0এবং -0: 1/+0 !== 1/-0
নিও

1
এই উত্তরটি এমন একটি পোস্টের সাথে লিঙ্ক করে যা উত্স হিসাবে এই উত্তরের সাথে লিঙ্ক করে ... সম্ভবত এটির
রিকার্ডো টমাসি

ওহ ঠিক আছে, সি এর মতো যেখানে অবিচ্ছিন্ন ভেরিয়েবল ঘোষণাগুলি অপরিজ্ঞাত হিসাবে বিবেচিত হয় (পুরানো সংস্করণগুলিতে আসলে কোনও পূর্ববর্তী প্রোগ্রামের ডেটা থাকতে পারে)।
সমিস

5
"তবে এটি আসলে একটি বাগ (এটি এমনকি ECMAScript 6 এ সংশোধন করা যেতে পারে)" - উত্স?
গাজুস

26

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

কোনও সম্পত্তি যখন এর কোনও সংজ্ঞা থাকে না, তা সংজ্ঞায়িত হয়। নাল একটি বস্তু। এর ধরণটি অবজেক্ট। নাল একটি বিশেষ মান যার অর্থ "কোন মূল্য নেই ef

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

 undefined == null
 null == undefined

আরও বিশদ জন্য জাভাস্ক্রিপ্ট পার্থক্য দেখুন নাল এবং অপরিবর্তিত

এবং আপনার নতুন সম্পাদনা হ্যাঁ

if (object == null)  does mean the same  if(!object)

বস্তুটি মিথ্যা কিনা তা পরীক্ষা করার সময়, উভয়ই কেবল মিথ্যা হিসাবে পরীক্ষা করার সময় শর্তটি পূরণ করে , তবে সত্য না হলে

এখানে চেক করুন: জাভাস্ক্রিপ্ট গেটচা


4
আপনার === ব্যবহার করা উচিত, তারপরে অপরিবর্তিত! == নাল: ডি
অলিজেজ

1
শেষ অংশটি মনোযোগ দিন, আমার উত্তরটি ভুল দেখুন;)
কেন্ত্রোমিরা

6
! অবজেক্ট "অবজেক্ট == নাল" এর মতো নয় ... বাস্তবে এগুলি একেবারেই আলাদা। ! অবজেক্টটি সত্য হয়ে যাবে যদি বস্তু 0 হয়, একটি খালি স্ট্রিং, বুলিয়ান মিথ্যা, অপরিজ্ঞাত বা নাল হয়।
জেমস

3
নাল কি আসলেই কোনও জিনিস? আপনি যে প্রথম লিঙ্কটি চেক প্রদান করেছেন তা টাইপফুল দ্বারা বাতিল করা হয়েছে, তবে কোনও ভাষা নকশা ত্রুটির কারণে টাইপফ (নাল) 'অবজেক্ট' এ মূল্যায়ন করে।
c4il

2
nullকোন বস্তু নয়। এটি typeof null == 'object';সত্য প্রত্যাবর্তন জাভাস্ক্রিপ্টে স্থির করা যায় না এমন বাগের কারণে (বর্তমানে, তবে ভবিষ্যতে পরিবর্তিত হতে পারে)।
মোহামাদ

21

প্রশ্নের প্রথম অংশ:

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

এটি একটি জাভাস্ক্রিপ্ট ডিজাইনের ত্রুটি যা তারা এখনই ঠিক করতে পারে না। এটি টাইপ নাল হওয়া উচিত ছিল, অবজেক্ট টাইপ করা উচিত ছিল না, বা এটি মোটেও নেই। সত্যিকারের বস্তুগুলি সনাক্ত করার সময় এটি অতিরিক্ত চেকের প্রয়োজন হয় (কখনও কখনও ভুলে যায়) এবং এটি বাগের উত্স।

প্রশ্নের দ্বিতীয় অংশ:




if (object == null)
Do something

হিসাবে একই পরীক্ষা করা হয়

if (!object)
Do something

দুটি চেক সর্বদা উভয়ই মিথ্যা থাকে ব্যতীত:

  • অবজেক্টটি অপরিজ্ঞাত বা নাল: উভয়ই সত্য।

  • অবজেক্টটি আদিম, এবং 0, ""বা মিথ্যা: প্রথমে মিথ্যা, দ্বিতীয় সত্যটি পরীক্ষা করুন।

বস্তুর একটি আদিম নয়, কিন্তু একটি বাস্তব বস্তু, যদি চান তাহলে new Number(0), new String("")বা new Boolean(false), তারপর উভয় চেক মিথ্যা।

সুতরাং যদি 'অবজেক্ট' এর অর্থ একটি আসল অবজেক্ট হিসাবে বোঝানো হয় তবে উভয় চেক সবসময় একই থাকে। যদি আদিমদের অনুমতি দেওয়া হয় তবে চেকগুলি 0 "", এবং মিথ্যা হিসাবে পৃথক।

যেমন ক্ষেত্রে object==null, অদ্বিতীয় ফলাফলগুলি বাগের উত্স হতে পারে। ব্যবহারের ==পরামর্শ দেওয়া হয় না, ===পরিবর্তে ব্যবহার করুন।

প্রশ্নের তৃতীয় অংশ:

এবং এছাড়াও:

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

জাভাস্ক্রিপ্টে, একটি পার্থক্য হ'ল নাল টাইপ অবজেক্টের এবং অপরিজ্ঞাত টাইপ অপরিজ্ঞাত ined

জাভাস্ক্রিপ্টে, null==undefinedএটি সত্য এবং টাইপ উপেক্ষা করা হলে সমান বলে বিবেচিত হবে। কেন তারা সিদ্ধান্ত নিয়েছে তবে 0, ""এবং মিথ্যা সমান নয়, আমি জানি না। এটি একটি নির্বিচার মতামত বলে মনে হচ্ছে।

জাভাস্ক্রিপ্টে, null===undefinedটাইপটি একই রকম হওয়া উচিত বলে এটি সত্য নয় ===

বাস্তবে, নাল এবং অপরিজ্ঞাত অভিন্ন, যেহেতু তারা উভয়ই অস্তিত্বের প্রতিনিধিত্ব করে। সুতরাং 0 করুন, এবং ""সেই বিষয়েও এবং সম্ভবত খালি পাত্রে []এবং {}। একই ধরণের অনেক ধরণের জিনিস বাগগুলির জন্য একটি রেসিপি। এক প্রকার বা কিছুই মোটেই ভাল নয়। আমি যতটা সম্ভব ব্যবহার করার চেষ্টা করব।

'মিথ্যা', 'সত্য', এবং '!' কীটগুলির আরও একটি ব্যাগ যা সরল করা যেতে পারে, উদাহরণস্বরূপ, if(!x)এবং if(x)একা যথেষ্ট, আপনার সত্য এবং মিথ্যা দরকার নেই।

কোনও ঘোষিত var xহ'ল টাইপ অপরিজ্ঞাত যদি কোনও মান না দেওয়া হয় তবে এটি এমন হওয়া উচিত যেন x কখনই ঘোষণা করা হয়নি। অন্য একটি বাগ উত্স খালি কিছুই ধারক। সুতরাং এটির ঘোষণা এবং সংজ্ঞা দেওয়া ভাল, পছন্দ করুন var x=1

লোকেরা চেনাশোনাগুলিতে ঘুরে বেড়াচ্ছে এই সমস্ত বিভিন্ন ধরণের কিছুই আবিষ্কার করার চেষ্টা করছে না, তবে জটিল বিভিন্ন পোশাকের মধ্যে এটি কেবল একই জিনিস। বাস্তবতা হচ্ছে

undefined===undeclared===null===0===""===[]==={}===nothing

এবং সম্ভবত সবার ব্যতিক্রম ছুঁড়ে ফেলা উচিত।


8
দুর্দান্ত উত্তর, তবে এটি [] এর সাথে কিছুটা দূরে চলে গেছে: " বাস্তবে, নাল এবং অপরিজ্ঞাত একরকম ... এবং সম্ভবত খালি পাত্রে [] এবং {} " আপনি সম্ভবত আমাকে ভাবতে ভাবতে পারেন could some কিছু হওয়া উচিত নাল গন্ধ, কিন্তু আমার অন্ত্র ছাপ যে এটি করা উচিত নয়। তবে কম বিতর্কিতভাবে, একটি খালি অ্যারে []বোধগম্যভাবে একটি .push()ফাংশন রয়েছে , সুতরাং [] নাল হওয়ার পক্ষে কোনও ভাল যুক্তি নেই। $ 0.02।
ruffin

11
var x = null;

x নাল হিসাবে সংজ্ঞায়িত করা হয়

y সংজ্ঞায়িত হয় না; // কারণ আমি এটি সংজ্ঞায়িত করি নি

if (!x)

নালকে মিথ্যা হিসাবে মূল্যায়ন করা হয়


8

নাল এবং অপরিজ্ঞাত বোধ করার একটি উপায় হ'ল প্রতিটি কোথায় ঘটে তা বোঝা।

নিম্নলিখিত পরিস্থিতিতে একটি নাল প্রত্যাবর্তন মান আশা করুন:

  • পদ্ধতিগুলি যা ডিওএমকে জিজ্ঞাসা করে

    console.log(window.document.getElementById("nonExistentElement"));
    //Prints: null
  • একটি অ্যাজাক্স অনুরোধ থেকে জেএসএন প্রতিক্রিয়া পেয়েছে


    {
      name: "Bob",
      address: null
    }
  • RegEx.exec

  • নতুন কার্যকারিতা যা প্রবাহের অবস্থায় রয়েছে। নিম্নলিখিত রিটার্নগুলি নাল:


        var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));

       // But this returns undefined:

        Object.getOwnPropertyDescriptor({}, "a");

অ-অস্তিত্বের অন্যান্য সমস্ত ক্ষেত্রে অপরিবর্তিত (@ অ্যাক্সেল দ্বারা উল্লিখিত) দ্বারা চিহ্নিত করা হয়। নিম্নলিখিত প্রতিটি মুদ্রণ "অপরিজ্ঞাত":

    var uninitalised;
    console.log(uninitalised);

    var obj = {};
    console.log(obj.nonExistent);

    function missingParam(missing){
        console.log(missing);
    }

    missingParam();

    var arr = [];
    console.log(arr.pop());        

অবশ্যই যদি আপনি var ইউনিটিয়ালাইজড = নাল লেখার সিদ্ধান্ত নেন; অথবা কোনও পদ্ধতি থেকে নিজেই নালায় ফিরে আসুন তবে আপনার অন্যান্য পরিস্থিতিতেও নালার ঘটনা ঘটবে। তবে এটি বেশ সুস্পষ্ট হওয়া উচিত।

তৃতীয় কেসটি হ'ল আপনি যখন কোনও ভেরিয়েবল অ্যাক্সেস করতে চান তবে এটি ঘোষণা করা হয়েছে কিনা তা আপনি জানেন না। সেক্ষেত্রে একটি রেফারেন্স ত্রুটি এড়াতে টাইপ অফ ব্যবহার করুন:

if(typeof unknown !== "undefined"){
    //use unknown
}

আপনি যখন ডিওএম নিয়ে চালাচ্ছেন, অ্যাজাক্সের সাথে লেনদেন করছেন, বা নির্দিষ্ট কিছু ECMAScript 5 বৈশিষ্ট্য ব্যবহার করছেন তখন সংক্ষিপ্তসার পরীক্ষা করুন। অন্যান্য সমস্ত ক্ষেত্রে কঠোর সাম্যের সাথে অপরিজ্ঞাত জন্য পরীক্ষা করা নিরাপদ:

if(value === undefined){
  // stuff
}

8

জাভাস্ক্রিপ্টে অনেকগুলি নাল চেকের তুলনা:

http://jsfiddle.net/aaronhoffman/DdRHB/5/

// Variables to test
var myNull = null;
var myObject = {};
var myStringEmpty = "";
var myStringWhiteSpace = " ";
var myStringHello = "hello";
var myIntZero = 0;
var myIntOne = 1;
var myBoolTrue = true;
var myBoolFalse = false;
var myUndefined;

...trim...

http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html

জাভাস্ক্রিপ্ট নাল চেক তুলনা চার্ট


1
"var myUnd परिभाषित;" করে পরিবর্তনশীল সংজ্ঞায়িত (অজানা টাইপ সঙ্গে পরিচিত ভেরিয়েবল হিসাবে)?
কিউ ফ্যান

6

নাল এবং অপরিজ্ঞাত উভয়ই মান সমতার জন্য মিথ্যা (নাল == অপরিবর্তিত): তারা উভয়ই বুলিয়ান মিথ্যাতে পতিত হয়। এগুলি একই জিনিস নয় (নাল! == অপরিবর্তিত)।

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

নাল হ'ল অবজেক্টের উদাহরণ। নালটি ডিওএম পদ্ধতিগুলির জন্য ব্যবহৃত হয় যা সংগ্রহের অবজেক্টগুলি খালি ফলাফল নির্দেশ করার জন্য ফিরিয়ে দেয়, যা কোনও ত্রুটি নির্দেশ না করে একটি মিথ্যা মান সরবরাহ করে।


5

কিছু নির্ভুলতা:

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


ifনিম্নরূপে যা ঘটে তা নিম্নরূপ if( o ):

প্রথম বন্ধনী ণ মত প্রকাশের মূল্যায়ন করা হয়, এবং তারপর ifটাইপ-উপর চাপ বন্ধনীর মধ্যে মত প্রকাশের মান কিক - আমাদের ক্ষেত্রে o

জাভাস্ক্রিপ্ট মধ্যে Falsy (যে মিথ্যাতে বাধ্য পাবেন) মান হল: '', নাল, অনির্দিষ্ট, 0, এবং মিথ্যা


5

এই পৃষ্ঠায় জাভাস্ক্রিপ্ট সংজ্ঞা গাইড 6th ষ্ঠ সংস্করণ থেকে এবং এর মধ্যে স্বতন্ত্রতা কী তাundefinednull উত্তর যুক্ত করতে :

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


3

nullএকটি বস্তু। এটির ধরণটি নাল। undefinedকোন বস্তু নয়; এটির ধরণ নির্ধারিত।


11
ভুল - উভয়ই nullএবং undefinedআদিম মান - typeof null === 'object'এটি একটি ভাষা বাগ, কারণObject(null) !== null
ক্রিস্টোফ

কোন না. অবজেক্ট () সেইভাবে কাজটি কাস্ট করুন, দেখুন ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - 15.2.2.1 নতুন অবজেক্ট ([মান]) ... 8. (আর্গুমেন্টের মান সরবরাহ করা হয়নি বা এর ধরণটি নুল বা অপরিজ্ঞাত)) একটি নতুন নেটিভ ECMAScript অবজেক্ট তৈরি করুন। নবনির্মিত অবজেক্টের [[প্রোটোটাইপ]] সম্পত্তিটি অবজেক্ট প্রোটোটাইপ অবজেক্টে সেট করা আছে। নবনির্মিত অবজেক্টের [[শ্রেণি]] সম্পত্তি "অবজেক্ট" এ সেট করা আছে। নবনির্মিত অবজেক্টের কোনও [[মান]] সম্পত্তি নেই। সদ্য নির্মিত নেটিভ অবজেক্টটি ফিরিয়ে দিন।
কেন্তোরমিউড়া

3
@ ক্রিসটফ: মানে, আপনি ঠিক বলেছেন। নালটি একটি ধরণের হওয়া উচিত , আমার অর্থ হ'ল আপনি এটি সেভাবে পরীক্ষা করতে পারবেন না কারণ: সতর্কতা (নতুন অবজেক্ট ()! == নতুন অবজেক্ট ()); / * সত্য, নতুন আইট্যান্স একই আইট্যান্স / সতর্কতা নয় (অবজেক্ট (নাল)। কনস্ট্রাক্টর == {con। কনস্ট্রাক্টর); / স্পেক / সতর্কতার মতো সত্য (অবজেক্ট (নাল) .প্রোটোটাইপ == {} .প্রোটোটাইপ); / নির্দিষ্ট / সতর্কতা হিসাবে সত্য (অবজেক্টের নাল উদাহরণ); / স্পষ্টতই মিথ্যা, নাল মানে তাত্ক্ষণিক নয় * / তবে মূলত একটি এক্স বাগের এক্সডি দেখুন: uselesspickles.com/blog/2006/06/12/… এবং javascript.crockford.com/remedial.html
কেন্তারমিউরা

2

নিম্নলিখিত ফাংশনটি দেখায় যে এবং কেন পার্থক্যটি কাজ করার জন্য সক্ষম:

function test() {
        var myObj = {};
        console.log(myObj.myProperty);
        myObj.myProperty = null;
        console.log(myObj.myProperty);
}

ফোন দিলে

test();

আপনি পাচ্ছেন

অনির্দিষ্ট

খালি

এটি এখনও সংজ্ঞায়িত না হওয়ার সময় প্রথমটি console.log(...)থেকে পাওয়ার চেষ্টা করে - সুতরাং এটি "অপরিজ্ঞাত" ফিরে আসে। এটিকে নাল নির্ধারণের পরে, দ্বিতীয়টি স্পষ্টতই "নাল" প্রত্যাবর্তন করবে কারণ এটি বিদ্যমান, তবে এটির জন্য এটি নির্ধারিত মান রয়েছে ।myPropertymyObjconsole.log(...)myPropertynull

এই পার্থক্যটি জিজ্ঞাসা করতে সক্ষম হওয়ার জন্য, জাভাস্ক্রিপ্টটিতে রয়েছে nullএবং undefined: যদিও nullঅন্যান্য ভাষাগুলির মতো কোনও বস্তুও undefinedকোনও বস্তু হতে পারে না কারণ কোনও উদাহরণ নেই (এমনকি একটি nullউদাহরণও নেই) উপলভ্য।


2

উদাহরণস্বরূপ window.someWeirdProperty, তাই না

"window.someWeirdProperty === null" মিথ্যা যাও যখন মূল্যায়ন

"window.someWeirdProperty === undefined" সত্য মূল্যায়ন।

তদুপরি চেকিফ if (!o)হওয়ায় যাচাই if (o == null)করার oমতো নয় false


আপনি দুটি শর্তের মধ্যে পার্থক্যটি বর্ণনা করতে পারেন
রাহুল

আমার উত্তরটি পড়ুন, তার অর্থ হ'ল যদি ও 0 এর সমান হয় তবে মিথ্যা বা "" বুলিয়ান মানটি মিথ্যা: var undef, বিভিন্ন = [0, "", নাল, মিথ্যা, অপরিবর্তিত]; জন্য (বিভিন্ন اعتراض মধ্যে বিভিন্ন) {সতর্কতা (! اعتراض); //
আইআই এর

2

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

x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0

এটি কাউন্টারগুলির জন্য ডিফল্ট সংখ্যাসূচক মান নির্ধারণের জন্য দরকারী। এর ঘোষণায় আপনি কতবার একটি পরিবর্তনশীল -১ এ সেট করেছেন?


2

ইন জাভাস্ক্রিপ্ট null একটি নয় objectটাইপ এটি একটি হল primitaveপ্রকার।

পার্থক্য কি? অপরিবর্তিত এমন পয়েন্টারকে নির্দেশ করে যা সেট করা হয়নি। নাল নাল পয়েন্টার উদাহরণস্বরূপ কিছু নিজে একটি পরিবর্তনশীল ধরনের হতে সেট করেছে বোঝায়null


2

এটা দেখ:

   <script>
function f(a){
  alert(typeof(a));
  if (a==null) alert('null');
  a?alert(true):alert(false);
}
</script>
                                          //return:
<button onclick="f()">nothing</button>    //undefined    null    false
<button onclick="f(null)">null</button>   //object       null    false
<button onclick="f('')">empty</button>    //string               false
<button onclick="f(0)">zero</button>      //number               false
<button onclick="f(1)">int</button>       //number               true
<button onclick="f('x')">str</button>     //string               true

1

নিকোলাস সি জাকাস রচিত "অবজেক্ট-ওরিয়েন্টেড জাভাস্ক্রিপ্টের নীতিগুলি" থেকে

তবে কোনও জিনিস যখন টাইপটি নাল হয় তখন কেন? (আসলে, এটি টিসি 39, একটি কমিটি যা জাভাস্ক্রিপ্ট ডিজাইন করে এবং রক্ষণাবেক্ষণ করে এটি একটি ত্রুটি হিসাবে স্বীকৃতি দিয়েছে You আপনি নাল একটি খালি অবজেক্ট পয়েন্টার হিসাবে যুক্ত করতে পারেন, "অবজেক্ট" কে লজিক্যাল রিটার্ন মান হিসাবে তৈরি করেছেন, তবে এটি এখনও বিভ্রান্তিকর।

জাকাস, নিকোলাস সি। (2014-02-07)। অবজেক্ট-ওরিয়েন্টেড জাভাস্ক্রিপ্টের মূলনীতি (কিন্ডল লোকেশন 226-227)। স্টার্ক প্রেস নেই। কিন্ডলে সংস্করণ.

বলেছিল:

var game = null; //typeof(game) is "object"

game.score = 100;//null is not an object, what the heck!?
game instanceof Object; //false, so it's not an instance but it's type is object
//let's make this primitive variable an object;
game = {}; 
typeof(game);//it is an object
game instanceof Object; //true, yay!!!
game.score = 100;

অপরিজ্ঞাত কেস:

var score; //at this point 'score' is undefined
typeof(score); //'undefined'
var score.player = "felix"; //'undefined' is not an object
score instanceof Object; //false, oh I already knew that.

1

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

  • হ্যাঁ, আইটেমটির মূল্য জানা যায়; এটা করা হয় 'সংজ্ঞায়িত।' এটি সূচনা করা হয়েছে।
  • আইটেমটির মান: "কোনও মূল্য নেই no"

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


1
  1. অপরিজ্ঞাত অর্থ একটি ভেরিয়েবল ঘোষিত হয়েছে তবে এটির কোনও মূল্য বরাদ্দ করা হয়নি, যদিও নলকে "কোনও মূল্য নেই" উপস্থাপন করে একটি ভেরিয়েবলের জন্য বরাদ্দ করা যেতে পারে ((নুল একটি অ্যাসাইনমেন্ট অপারেটর)

2. অপরিবর্তিত একটি নিজেই টাইপ হয় যখন নুল একটি বস্তু।

৩. জাভাস্ক্রিপ্ট নিজেই কোনও নির্ধারিত ভেরিয়েবলকে অপরিজ্ঞাতভাবে আরম্ভ করতে পারে তবে এটি কোনও ভেরিয়েবলের মানকে কখনই নালায় সেট করতে পারে না। এটি অগ্রগতি সম্পন্ন করতে হবে।

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