নাল বনাম বনাম নির্ধারিত এবং == এবং === পার্থক্যের জন্য জাভাস্ক্রিপ্ট চেক করা


579
  1. আমি কিভাবে একটি পরিবর্তনশীল চেক করবেন এটা যদি nullবা undefinedএবং এর মধ্যে পার্থক্য কি nullএবং undefined?

  2. ==এবং ==="(===" "গুগল অনুসন্ধান করা শক্ত) এর মধ্যে পার্থক্য কী ?


10
2. মধ্যে পার্থক্য ==এবং ===ভাল হয় এখানে বর্ণিত
উজবেকজোন

1. ব্যবহার করুন === পরিবর্তে == জাভাস্ক্রিপ্ট দুটি ভিন্ন ধরণের সাম্য অপারেটর ব্যবহার করে: === | ! == এবং == | ! = তুলনা করার সময় সর্বদা পূর্ব সেটটি ব্যবহার করা ভাল অনুশীলন হিসাবে বিবেচিত হয়। "যদি দুটি অপারেন্ড একই ধরণের এবং মানের হয় তবে === সত্য উত্পাদন করে এবং! == মিথ্যা উত্পাদন করে" " - জাভাস্ক্রিপ্ট: গুড পার্টস যাইহোক, == এবং! = এর সাথে কাজ করার সময়, বিভিন্ন ধরণের সাথে কাজ করার সময় আপনি সমস্যাগুলির মধ্যে চলে যাবেন। এই ক্ষেত্রে, তারা মানগুলিকে জোর করে ব্যর্থ করার চেষ্টা করবে। Code.tutsplus.com/tutorials/…
জেসনলোনহার্ড

4
আপনি এর জন্য গুগল অনুসন্ধান করতে পারেন: "কঠোর সাম্য অপারেটর" - এটি খুব প্রাসঙ্গিক ফলাফল নিয়ে আসে
ড্যানিয়েল্ড

কেবলমাত্র এখানে প্রচুর উত্তর যুক্ত করতে যে আপনি ভেরিয়েবলটি নাল বা অপরিজ্ঞাত কিনা তা পরীক্ষা করতে লডাডস ডকস টিসিস নীল ফাংশনটি ব্যবহার করতে পারেন
কেফির ইরজ

উত্তর:


936

আমি কিভাবে একটি পরিবর্তনশীল চেক করবেন এটা যদি nullবা undefined...

পরিবর্তনশীল null:

if (a === null)
// or
if (a == null) // but see note below

... তবে নোট করুন পরবর্তীটি যদি aহয় তবে তা সত্যও হবে undefined

এটা কি undefined:

if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below

... তবে আবার মনে রাখবেন যে শেষটি অস্পষ্ট; যদি aহয় তবে এটি সত্যও হবে null

এখন, উপরোক্ত সত্ত্বেও, তাদের পরীক্ষা করার স্বাভাবিক উপায় হ'ল এগুলি সত্য যে সত্য তা মিথ্যা :

if (!a) {
    // `a` is falsey, which includes `undefined` and `null`
    // (and `""`, and `0`, and `NaN`, and [of course] `false`)
}

এটি অনুচ্ছেদে টুবুলিয়ান দ্বারা সংজ্ঞায়িত করা হয়েছে ।

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

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

nullএর চেয়ে কিছুটা বেশি নির্দিষ্ট undefined: এটি একটি ফাঁকা বস্তুর উল্লেখ। অবশ্যই জাভাস্ক্রিপ্ট আলগাভাবে টাইপ করা আছে, তবে জাভাস্ক্রিপ্টের সাথে সমস্ত জিনিস আলস্যভাবে টাইপ করা হয় না। ব্রাউজারগুলিতে ডোম-এর মতো কোনও এপিআই-এর যদি কোনও অবজেক্ট রেফারেন্স ফাঁকা থাকে তবে আমরা ব্যবহার করি null, তা নয় undefined। এবং একইভাবে, ডোমের getElementByIdক্রিয়াকলাপটি কোনও অবজেক্ট রেফারেন্স প্রদান করে - হয় বৈধ একটি (যদি এটি ডোম উপাদানটি খুঁজে পায়), বা null(যদি তা না পেয়ে থাকে)।

মজার বিষয় (বা না), তারা তাদের নিজস্ব ধরণের। যা বলতে হয়, nullনাল টাইপের undefinedএকমাত্র মান, এবং অপরিজ্ঞাত টাইপের একমাত্র মান।

"==" এবং "===" এর মধ্যে পার্থক্য কী?

তাদের মধ্যে পার্থক্যটি হ'ল ==মানগুলি মিলিয়ে দেওয়ার চেষ্টা করার জন্য ধরণের জবরদস্তি ===করবে এবং তা হবে না। সুতরাং উদাহরণস্বরূপ "1" == 1সত্য, কারণ "1"coerces 1। তবে "1" === 1এটি মিথ্যা , কারণ প্রকারগুলি মেলে না। ( "1" !== 1সত্য।) প্রথম (বাস্তব) পদক্ষেপটি ===হল "অপারেশনগুলির ধরণগুলি কি একই রকম?" এবং উত্তরটি যদি "না" হয় তবে ফলাফল হয় false। প্রকারগুলি যদি একই হয় তবে এটি ঠিক কী ==করে।

প্রকার জবরদস্তি বেশ জটিল নিয়ম ব্যবহার করে এবং আশ্চর্যজনক ফলাফল হতে পারে (উদাহরণস্বরূপ, "" == 0এটি সত্য)।

অনুমান আরও:


122
টিজির উত্তরটি ছড়িয়ে দিতে, === মানে মান এবং টাইপ একই।
স্লিপি

13
@ স্লেপি: :-) @ এমজিজি 4 এন: হ্যাঁ, এটা ঠিক। if (a) { ... }"যদি aসত্যবাদী হয় " এর অর্থ হ'ল "সত্যবাদী" হ'ল একটি শূন্য, নন-নাল, অপরিজ্ঞাত, অ-মিথ্যা, খালি-খালি স্ট্রিং মান। :-)
টিজে ক্রাউডার

4
উম ... আপনি কেন মনে করেন যে এটি "দরকারী নয়" (ডাউনভোট বোতামটির সরঞ্জামদণ্ডটি উদ্ধৃত করার জন্য) কিছু দরকারী প্রতিক্রিয়া ভাগ করে নেওয়ার বিষয়ে যত্ন নেবে?
টিজে ক্রাউডার

2
@ ইেলজকো: আমি মনে করি ক্রোকফোর্ডের এই বিষয়টিতে ভুল হতে পারে। এটি সত্য যে nullকোনও বস্তু নয় , এটি একটি অবজেক্ট রেফারেন্স যার অর্থ "কোনও বস্তু নেই"। এটি গুরুত্বপূর্ণ, এটা কি (যেমন, হোস্ট প্রদত্ত ইন্টারফেস সহ ব্যবহার করা হয়ে যখন তারা বস্তুর রেফারেন্স প্রদান কিন্তু প্রদান না থাকে কারণ node.nextSiblingযখন nodeতার পিতা বা মাতা শেষ উপাদান হয়, অথবা getElementByIdযখন যে ID সহ কোনো উপাদান)। হোস্টটি এর জন্য যে প্রযুক্তি ব্যবহার করে তা জাভাস্ক্রিপ্ট যেমন ভেরিয়েবল / সম্পত্তির ধরণের সম্পর্কে নমনীয় না হয়, তাই এটিতে একটি nullআপত্তি রেফার প্রয়োজন ছিল (বিপরীতে undefined)।
টিজে ক্রাউডার

2
আমাকে একমত হতে হবে যে ক্রকফোর্ড ভুল হয়েছে। typeof null"অবজেক্ট" ফিরিয়ে দেওয়ার অর্থ হয়। কেবলমাত্র অন্য মানটি যা বোঝায় তা হ'ল "নাল", যেহেতু অবশ্যই এটির থেকে আলাদা কিছু পাওয়া উচিত typeof undefined। নাল একটি নাল অবজেক্টের রেফারেন্স উপস্থাপন করে যা খুব কমপক্ষে, পরিবর্তনশীল হোল্ডিংকে বোঝায় এটি কিছু ধরণের 'অবজেক্ট' এর জন্য। এটি যদি ভুল হয় তবে এটি একটি ভাল ভুল ছিল। যাইহোক, উত্তরের ক্ষেত্রে, ক্রস-উইন্ডো স্ক্রিপ্টিংয়ের সময় টিপটি সম্পর্কে undefined! == undefinedবিশেষত ডিবাগিংয়ের উদ্দেশ্যে জানা ভাল।
ট্রায়ঙ্কো

93

পার্থক্যটি সূক্ষ্ম।

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

কিন্তু আপনি যদি তারপর ধার্য a = null;তারপর aএখন হতে হবে null। জাভাস্ক্রিপ্ট nullএকটি অবজেক্ট ( typeof nullএকটি জাভাস্ক্রিপ্ট কনসোল চেষ্টা করুন যদি আপনি আমাকে বিশ্বাস করেন না), যার অর্থ নাল একটি মান (আসলে এমনকি undefinedএকটি মানও)।

উদাহরণ:

var a;
typeof a;     # => "undefined"

a = null;
typeof null;  # => "object"

এটি ফাংশন আর্গুমেন্টে কার্যকর প্রমাণ করতে পারে। আপনার ডিফল্ট মান থাকতে পারে তবে গ্রহণযোগ্য হতে নালাকে বিবেচনা করুন। কোন ক্ষেত্রে আপনি করতে পারেন:

function doSomething(first, second, optional) {
    if (typeof optional === "undefined") {
        optional = "three";
    }
    // do something
}

আপনি বাদ তাহলে optionalপ্যারামিটার doSomething(1, 2) thenঐচ্ছিক হতে হবে "three"স্ট্রিং কিন্তু আপনি যদি পাস doSomething(1, 2, null)তারপর হতে হবে ঐচ্ছিক null

সমান ==এবং কঠোর সমান ===তুলনামূলক হিসাবে, প্রথমটি দুর্বলভাবে টাইপ করা হয়, তবে কঠোরভাবে সমান মানগুলির ধরণের জন্যও পরীক্ষা করে। তার মানে যে 0 == "0"সত্য ফিরে আসবে; এবং 0 === "0"মিথ্যা ফিরে আসবে কারণ একটি সংখ্যা একটি স্ট্রিং নয়।

আপনি সেই অপারেটরগুলিকে undefinedএকটি মধ্যে চেক করতে ব্যবহার করতে পারেন null। উদাহরণ স্বরূপ:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

শেষ কেসটি আকর্ষণীয়, কারণ এটি আপনাকে ভেরিয়েবলটি অপরিজ্ঞাত বা নাল এবং অন্য কিছু নয় কিনা তা পরীক্ষা করতে দেয়:

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true

1
কাইল সিম্পসন দাবি করেছেন যে নাল ফেরানো
Dont-

15

এই প্রশ্নগুলির সম্পূর্ণ উত্তরের জন্য অনুমিত স্থানটি। এখানে একটি সংক্ষিপ্তসার:

  1. একটি চলক জন্য x, আপনি এই করতে পারেন:

    • এটি nullসরাসরি তুলনা করে ব্যবহার করে দেখুন কিনা ===। উদাহরণ:x === null
    • এটি undefinedদুটি মূল পদ্ধতির মাধ্যমে হয় কিনা তা পরীক্ষা করে দেখুন: এর সাথে সরাসরি তুলনা undefinedবা typeof। জন্য বিভিন্ন কারণের , আমি পছন্দ typeof x === "undefined"
    • এটির মধ্যে একটি কিনা nullএবং পরীক্ষা undefinedকরে নিন ==এবং সামান্য আরকেন ধরণের জবরদস্তির বিধিগুলি ব্যবহার করে এবং নির্ভর করে যার অর্থ x == nullআপনি যা চান ঠিক তা করেন does

  2. ==এবং এর মধ্যে মূল পার্থক্যটি ===হ'ল যদি অপারেন্ডগুলি বিভিন্ন ধরণের হয় ===তবে সর্বদা ফিরে আসবে falseযখন এমন নিয়মগুলি== ব্যবহার করে এক বা উভয় অপারেশনগুলিকে একই ধরণের রূপান্তরিত করে যা কিছুটা অপ্রয়োজনীয় আচরণের দিকে পরিচালিত করে। যদি অপারেন্ডগুলি একই ধরণের হয় (যেমন উভয় স্ট্রিং যেমন উপরের তুলনায়), এবং ঠিক একইরকম আচরণ করবে।typeof=====

আরও পঠন:


9

কোনও পরিবর্তনশীল যদি নাল বা অপরিজ্ঞাত হয় তবে আমি কীভাবে তা পরীক্ষা করব

কোনও ভেরিয়েবলের এর মতো বৈধ মান আছে কিনা তা পরীক্ষা করে দেখুন:

if(variable)

ভেরিয়েবলটি না রাখলে এটি সত্য হবে:

  • খালি
  • অনির্দিষ্ট
  • 0
  • মিথ্যা
  • "" (একটি খালি স্ট্রিং)
  • NaN

8

অনির্দিষ্ট

এর অর্থ হল ভেরিয়েবলটি এখনও অন্তর্নিহিত হয়নি।

উদাহরণ:

var x;
if(x){ //you can check like this
   //code.
}

সমান (==)

এটি কেবলমাত্র চেক মানটি ডেটাটাইপের সমান নয়।

উদাহরণ:

var x = true;
var y = new Boolean(true);
x == y ; //returns true

কারণ এটি কেবল মূল্য পরীক্ষা করে।

কঠোর সমান (===)

মানটি পরীক্ষা করে এবং ডেটাটাইপ একই হওয়া উচিত।

উদাহরণ:

var x = true;
var y = new Boolean(true);
x===y; //returns false.

কারণ এটি পরীক্ষা করে ডেটাটাইপ এক্স একটি আদিম ধরণের এবং y হ'ল বুলিয়ান অবজেক্ট।


4

এ্যাড 1. nullবিশ্বব্যাপী বস্তুর একটি সম্পত্তি একটি আইডেন্টিফায়ার নয়, মত undefined হতে পারে

বিজ্ঞাপন 2. ===চেক মান এবং প্রকার। ==Dont (ব্যবহার তুলনা পূর্বেই একই ধরনের এবং প্রণীত অন্তর্নিহিত রূপান্তর প্রয়োজন .valueOf()এবং .toString())। এখানে আপনার সমস্ত ( এসসিআর ) রয়েছে:

যদি

এখানে চিত্র বর্ণনা লিখুন

== (এর অবহেলা ! = )

এখানে চিত্র বর্ণনা লিখুন

=== (এর অবহেলা ! == )

এখানে চিত্র বর্ণনা লিখুন


1
এটি উল্লেখ করার মতো document.all == nullএবংdocument.all !== null
একজন ব্যবহারকারী

1

যদি আপনার (যৌক্তিক) চেকটি কোনও প্রত্যাখ্যান (!) এর জন্য হয় এবং আপনি উভয় জেএস ক্যাপচার করতে চান nullএবং undefined (যেমন বিভিন্ন ব্রাউজারগুলি আপনাকে বিভিন্ন ফলাফল দেয়) আপনি কম সীমাবদ্ধ তুলনাটি ব্যবহার করবেন: যেমন:

var ItemID = Item.get_id();
if (ItemID != null)
{
 //do stuff
}

এটি উভয় nullএবং ক্যাপচার করবেundefined


0

বিভিন্ন যুক্তি দিয়ে চেষ্টা করুন । শূন্য নয়, ফাঁকা নয়, অপরিজ্ঞাত নয় এবং শূন্য নয় জাভাস্ক্রিপ্ট এবং jquery এ এই কোডটি (! (! (ভেরিয়েবল))) ব্যবহার করার জন্য আপনি চারটি (4) শর্ত পরীক্ষা করার জন্য বেলো কোডটি ব্যবহার করতে পারেন।

function myFunction() {
var data;  //The Values can be like as null, blank, undefined, zero you can test

if(!(!(data)))
{
   //If data has valid value
    alert("data "+data);
} 
else 
{
    //If data has null, blank, undefined, zero etc.
    alert("data is "+data);
}

}

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