টাইপ বুলিয়ান কিনা তা কীভাবে পরীক্ষা করবেন


268

কোনও ভেরিয়েবলের টাইপ বুলিয়ান টাইপের কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

মানে, কিছু বিকল্প আছে যেমন:

if(jQuery.type(new Boolean()) === jQuery.type(variable))
      //Do something..

তবে সেটা আমার কাছে বেশ সুন্দর মনে হচ্ছে না।

এটি অর্জনের জন্য কি কোনও ক্লিনার উপায় আছে?


1
নয় trueবা falseটাইপ বুলিয়ান এর?
মাটিয়াস সিসেরো

1
আপনার চেক করার দরকার নেই, আপনি এটি করতে পারেন !!( ... some expression ...)এবং ফলাফলটি বুলিয়ান হবে।
কলিয়াম লাইনিংটন 16

1
নং: trueএবং falseধরনের প্রিমিটিভের হয় boolean। মূলধন-বি বুলিয়ান প্রকারটি বুলিয়ান আদিমদের জন্য একটি বস্তু মোড়কের ধরণ।
পয়েন্টি

@ কলমলাইনিংটন যে বুলিয়ান কনস্ট্রাক্টর দিয়ে তৈরি বস্তুর জন্য কাজ করবে না :)
পয়েন্টি

1
@ ক্যালামলাইনিংটন চেষ্টা করুন: if (new Boolean(false)) alert("hi");- অন্তর্নিহিত লিটল-বি বুলিয়ান মান নির্বিশেষে মূলধন-বি বুলিয়ান বস্তু সর্বদা "সত্যবাদী" থাকে।
পয়েন্টি

উত্তর:


505

এটা কি typeofজন্য আছে। বন্ধনীগুলি anচ্ছিক কারণ এটি একটি অপারেটর

if (typeof variable === "boolean"){
  // variable is a boolean
}

7
এটি ওপি কী করার চেষ্টা করছে তা পরিষ্কার নয়, তবে মূলধন-বি বুলিয়ান অবজেক্টগুলি তাদের বস্তুর মাধ্যমে "বস্তু" দেয় typeof
পয়েন্টি

14
1) typeofকোন ফাংশন নয়। ২) ট্রিপল অপারেটর === এর সাথে typeofব্যবহারের প্রয়োজন নেই, যেহেতু এটি সর্বদা একটি স্ট্রিং ফিরে আসবে (আফাইক, তবে যতদূর আমার মনে আছে, খুব পুরানো ব্রাউজারগুলির জন্য অন্য একটি মামলা ছিল)। 3) typeofএবং স্ট্রিং তুলনা ধীর। এগুলি ব্যবহার করবেন না। সরাসরি পরীক্ষা করুন (variable === true || variable === false)(আমি একটি ফাংশন লিখতে পরামর্শ দিই)।
StanE

6
typeof(variable) === typeof(true)আরও শক্তিশালী হবে না ?
মার্কাস জুনিয়াস ব্রুটাস

2
@TusharNiras nameএকটি বিশেষ সঙ্গে একটি বিশ্বব্যাপী জানালা সম্পত্তি সংগ্রহকারী developer.mozilla.org/en-US/docs/Web/API/Window/name
জ্যাক Lysobey

1
@ মার্কাসজুনিয়াস ব্রুটাস @ অমিত জোকি এটি বোকা, এর typeof trueপরিবর্তে আরও ভার্বোজ ব্যবহার করার কোনও সুবিধা নেই "boolean"। নতুন সংস্করণ ECMAScript এ কখনও কোনও ব্রেকিং পরিবর্তন হবে না।
m93a

40

যদি আপনি কেবল একটি আদিম মান পরীক্ষা করতে চান

typeof variable === 'boolean'

যদি কোনও অদ্ভুত কারণে আপনি কন্সট্রাক্টরের সাথে বুলিয়ান তৈরি করে থাকেন তবে সেগুলি সত্যই বুলেটিয়ান নয় তবে আদিম বুলেটিয়ান মান সম্বলিত অবজেক্টগুলি এবং এর মাধ্যমে তৈরি আদিম বুলেটিয়ান এবং বস্তু উভয়ের জন্য যাচাই করার একটি উপায় new Booleanহ'ল:

function checkBool(bool) {
    return typeof bool === 'boolean' || 
           (typeof bool === 'object' && 
            bool !== null            &&
           typeof bool.valueOf() === 'boolean');
}


2
বুলিয়ান আদিম এবং বুলিয়ান বস্তুকে একইরূপে বিবেচনা করা আমার পক্ষে খুব ব্যবহারিক বলে মনে হয় না, কারণ আমি সেগুলি যেভাবেই হোক ব্যবহার করতে পারি না।
ফেলিক্স ক্লিং

@ ফেলিক্সকলিং - আমার কাছে তা খুব ব্যবহারিক বলে মনে হচ্ছে না, তবে এটি মনে হয় যে ওপি একটি ভেরিয়েবল বুলিয়ান কিনা তা নির্ধারণ করার চেষ্টা করছে, এমনকি new Boolean()এটি তৈরির পরেও, যা প্রযুক্তিগতভাবে কোনও বুলিয়ান নয়, তবে একটি বস্তু, তবে এখনও ধরে রেখেছে একটি বুলিয়ান মান।
অ্যাডিনিও

আমি মনে করি যে ওপি কেবল এটি জানত না যে new Boolean()কোনও বস্তু ফেরায় (প্রশ্নের মন্তব্য দেখুন)। তবে যাই হোক না কেন :)
ফেলিক্স ক্লিং

@ ফেলিক্সক্লিং - কেবল প্রশ্ন এবং মন্তব্যগুলি পুনরায় পড়ুন, এবং আমি এখন দেখতে পাচ্ছি যে ওপি মূলত চেষ্টা করছে typeof variable === typeof new Boolean()এবং সম্ভবত একটি নিয়মিত টাইপ চেক চাইছে, তবে এর পরিবর্তে কিছুটা অদ্ভুত jQuery বাক্য গঠনতে ধরা পড়ে।
অ্যাডিনিও

আপনি আপনার কোডটি কীভাবে নমনীয় করতে চান তার উপর নির্ভর করে যদি পরম boolপাস হয় nullতবে typeof bool === 'object'তা এখনও মূল্যায়ন TypeError: Cannot read property 'valueOf' of nullকরতে পারে এবং কলটিতে ব্যাতিক্রম হবে typeof bool.valueOf()। সুতরাং, আমি পড়ার জন্য সেই শেষ লাইনটি পরিবর্তন (typeof bool === 'object' && bool && typeof bool.valueOf() === 'boolean');করব : যা কেবল তখনই মূল্যায়ন করবে যখন নাল boolহবে না
আল দাস

34

সঙ্গে বিশুদ্ধ জাভাস্ক্রিপ্ট , আপনি শুধু শুধু ব্যবহার করতে পারেন typeofএবং ভালো কিছু করতে typeof falseবা typeof trueতা ফিরে আসবে "boolean"...

তবে এটি করার একমাত্র উপায় নয়, আমি জাভাস্ক্রিপ্টে বুলিয়ান পরীক্ষা করতে পারেন এমন বিভিন্ন উপায়ে এবং কয়েকটি নতুন ফ্রেমওয়ার্কে এটি করতে পারেন এমন বিভিন্ন উপায়ে দেখানোর জন্য নীচে ফাংশনগুলি তৈরি করছি , আসুন আমরা এটি দিয়ে শুরু করব:

function isBoolean(val) {
   return val === false || val === true;
}

অথবা এক-লাইন ES6 উপায় ...

const isBoolean = val => 'boolean' === typeof val;

এবং এটি কল করুন!

isBoolean(false); //return true

মধ্যে এছাড়াও আন্ডারস্কোর সোর্স কোড তারা এই মত পরীক্ষা করুন (সঙ্গে: _ ফাংশনের নাম শুরুতে।):

isBoolean = function(obj) {
   return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
};

এছাড়াও jQuery এ আপনি এটি চেক করতে পারেন:

jQuery.type(true); //return "boolean"

ইন প্রতিক্রিয়া , propTypes ব্যবহার করলে আপনাকে হয়ত একটি মান পরীক্ষা করতে পারবেন ভালো বুলিয়ান হতে:

MyComponent.propTypes = {
  children: PropTypes.bool.isRequired
};

যদি টাইপস্ক্রিপ্ট ব্যবহার করে থাকেন তবে আপনি টাইপ বুলিয়ানও ব্যবহার করতে পারেন :

let isDone: boolean = false;

এটি করার আরেকটি উপায় হ'ল মানকে বুলিয়ান রূপান্তর করার মতো এবং এটি দেখতে ঠিক এটি একইরকম কিনা, এরকম কিছু:

const isBoolean = val => !!val === val;

বা পছন্দ:

const isBoolean = val => Boolean(val) === val;

এবং এটি কল!

isBoolean(false); //return true

এটি এর জন্য কোনও ফ্রেমওয়ার্ক ব্যবহার করার পরামর্শ দেওয়া হয়নি কারণ এটি জাভাস্ক্রিপ্টে সত্যই একটি সাধারণ চেক।


অসম্মতি: new Boolean(true) === new Boolean(true)মিথ্যা ফিরিয়ে দেওয়া উচিত (হিসাবে উল্লেখগুলি পৃথক হয়)। এই কারণেই isBoolean(new Boolean(true))ইচ্ছাটি মিথ্যা বলবে যদিও এটি অবশ্যই সত্য ( বুলিয়ানnew Boolean(true) টাইপ )।
অ্যালেক্সমেলউ

17

JQuery এর সাথে বা ছাড়াই এটি পরীক্ষা করার জন্য তিনটি "ভ্যানিলা" উপায় রয়েছে।

  1. প্রথমে জোর করে বলিয়ান মূল্যায়নকে বাধ্য করা, তারপরে এটি মূল মানের সমান কিনা তা পরীক্ষা করে দেখুন:

    function isBoolean( n ) {
        return !!n === n;
    }
  2. একটি সাধারণ typeofচেক করা:

    function isBoolean( n ) {
        return typeof n === 'boolean';
    }
  3. প্রাইমেটিভের উপর একটি ক্লাস র‍্যাপারের সম্পূর্ণ ওভারকিল এবং অপ্রয়োজনীয় ইনস্ট্যান্টেশন করা:

    function isBoolean( n ) {
        return n instanceof Boolean;
    }

তৃতীয়টি কেবল তখনই ফিরে আসবে true যদি আপনি একটি new Booleanক্লাস তৈরি করেন এবং এতে পাস করেন।

আদিমতার উপর জবরদস্তি সম্পর্কে বিস্তারিত জানাতে (# 1-তে দেখানো হয়েছে), সমস্ত আদিম ধরণগুলি এইভাবে চেক করা যেতে পারে:

  • Boolean:

    function isBoolean( n ) {
        return !!n === n;
    }
  • Number:

    function isNumber( n ) {
        return +n === n;
    }
  • String:

    function isString( n ) {
        return ''+n === n;
    }

টাইপ জালিয়াতি "সর্বাধিক অনুকূল" কেন? এর চেয়ে দ্রুত বা বেশি পাঠযোগ্য typeof? আমি অত্যন্ত সন্দেহ।
m93a

সুতরাং, তাত্ত্বিকভাবে, কোনও বুলিয়ানকে মান জোর করা 1 জারণ + 2 তুলনা + 1 তুলনা করে। প্রথম দুটি তুলনা জবরদস্তির পদক্ষেপের সময় হয়, এবং শেষের তুলনাটি প্রথম অবস্থানের বিরুদ্ধে (যা এখন একটি আদিম)। এরকম typeofআরো 1 বলপ্রয়োগ, কিন্তু typeofপদ্ধতি খুব শেষে +1 তুলনা ভিতরে কয়েক getters এবং তুলনা নেই। এখানে V8 রেফারেন্সটি রয়েছেtypeof
iSkore

1
সর্বোপরি, উভয়ই পদ্ধতিটি তাত্পর্যপূর্ণভাবে দ্রুত, ন্যানোসেকেন্ডের পরিমাণের পার্থক্য এত ছোট, এটি পরীক্ষা করা এমনকি কঠিন যে কোনটি দ্রুত। এখানে দুটি জেএসপিফারস রয়েছে। একজন বলে !!দ্রুততর, একজন বলে Booleanদ্রুততর। পরীক্ষার মধ্যে বদ্বীপটি কতটা ছোট তার একটি উল্লেখ মাত্র। বুলিয়ান চেকগুলি দ্রুত। jsperf.com/bool-not-not jsperf.com/bool-vs-doublenot
iSkore

আমি সম্মত হচ্ছি যে পার্থক্যটি পরিমাপযোগ্য নয় এবং এরকম ক্ষেত্রে পাঠ্যব্যবস্থাকে এএফএআইকে সর্বদা প্রথম হওয়া উচিত। সুতরাং মান এবং বোধগম্য typeof val === "boolean"অনুকূল।
m93a

1
হ্যাঁ, আমি এর সাথে একমত পঠনযোগ্যতা গুরুত্বপূর্ণ। অপারেটরগুলি পাঠযোগ্য নয় - আপডেট হবে
iSkore

16

আপনি এটি অর্জনের জন্য খাঁটি জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন:

var test = true;
if (typeof test === 'boolean')
   console.log('test is a boolean!');

7

আপনি যদি চান যে আপনার ফাংশনটি বুলিয়ান অবজেক্টগুলিকেও বৈধ করতে পারে, তবে সবচেয়ে কার্যকর সমাধানটি হ'ল:

function isBoolean(val) {
  return val === false || val === true || val instanceof Boolean;
}

উদাহরণস্বরূপ বুলিয়ান আমার জন্য ঘোষণা করা হয়নি।
ডুডি

3

জাভাস্ক্রিপ্টে পরিবর্তনশীল ধরণের পরীক্ষা করার সবচেয়ে নির্ভরযোগ্য উপায় নিম্নলিখিত :

var toType = function(obj) {
  return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
toType(new Boolean(true)) // returns "boolean"
toType(true); // returns "boolean"

এই জটিলতার কারণটি হ'ল typeof trueরিটার্নের "boolean"সময় typeof new Boolean(true)ফিরে আসে "object"


"boolean"মানটি যদি সত্যই কোনও বস্তু হয় তবে আপনি কেন ফিরে আসতে চান ? এটি আমার কাছে খুব ব্যবহারিক বলে মনে হয় না। বুলিয়ান বস্তুগুলি যেভাবেই বুলিয়ান আদিমদের থেকে আলাদাভাবে মোকাবেলা করতে হবে।
ফেলিক্স ক্লিং

1
কোডটি পরিষ্কার, সুন্দর বা পরিষ্কার নয়। নোট করুন ওপি একটি "এটি অর্জনের পরিষ্কার উপায়" জিজ্ঞাসা করছে।
স্প্যান্সার উইকজোরেক

আমি সম্মত হই যে কোডটি পরিষ্কার বা সুন্দর নয়, তবে এএফআইএকের কোনও সুন্দর এবং একই সময়ে নির্ভরযোগ্য বিকল্প নেই যদি ঘটনাস্থলে বুলিয়ান আদিম এবং বুলিয়ান উভয় বস্তু থাকে।
ভোলডিমায়ার ফ্রোলভ

এটি স্থানীয়ভাবে করা যায় এমন কিছু করার জন্য গুরুতর ওভারকিল সমাধানের মতো বলে মনে হচ্ছে।
ব্র্যান্ডস্ক্রিপ্ট


1

আপনি একটি ফাংশন তৈরি করতে পারেন যা typeofআর্গুমেন্টের জন্য পরীক্ষা করে ।

function isBoolean(value) {
  return typeof value === "boolean";
}

1

কখনও কখনও এটি পরীক্ষা করার জন্য আমাদের একক উপায়ের প্রয়োজন হয়। টাইপ, তারিখের জন্য কাজ করে না ইত্যাদি তাই আমি এটিকে সহজ করে দিয়েছি

Date.prototype.getType() { return "date"; }

জন্য এছাড়াও Number, String, Booleanইত্যাদি আমরা প্রায়ই একটি একক ভাবে প্রকার চেক প্রয়োজন ...


1

isBooleanঅনেলাইনারযুক্ত এমন ফাংশন তৈরি করা দীর্ঘমেয়াদী typeof v === "boolean"মনে হয় খুব অযৌক্তিক। আমি অবাক হয়েছি যে প্রায় প্রত্যেকে আপনার নিজের ফাংশন তৈরি করার পরামর্শ দেয়। এটি দেশীয় প্রোটোটাইপগুলি বাড়ানোর মতোই ক্যান্সার বলে মনে হচ্ছে।

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

শুধু স্মৃতিচারণ করুন typeof v === "boolean"এবং এগুলি সবই। আপনার আইডিইতে একটি টেম্পলেট যুক্ত করুন যাতে এটি তিনটি লেটার শর্টকাট দিয়ে রাখতে সক্ষম হয় এবং খুশি হয়।


1
যাইহোক, যদি পারফরম্যান্স খুব গুরুত্বপূর্ণ হয় তবে বুলেয়ান মান পরীক্ষা করার জন্য একটি ক্রিয়াকলাপ থাকা আমার পরীক্ষায় নোড.জেএস-তে এটি ইনলাইন (ফর লুপ 100000000x) করার চেয়ে 10% বেশি সময় নিয়েছিল তবে সবচেয়ে খারাপ বিকল্পটি ছিল v === true || v === false, যা ক্ষেত্রে 2 টি যাচাইকরণ করে false। র‌্যাঙ্কিং: (1 - উভয়ই একই রকম) typeof v === 'booleanএবং typeof v === typeof true(2) isBoolean(v), (3) v === true || v === false
জেপেনা

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

1
if(['true', 'yes', '1'].includes(single_value)) {
    return  true;   
}
else if(['false', 'no', '0'].includes(single_value)) {
    return  false;  
}

যদি আপনার একটি স্ট্রিং থাকে


1
  • সর্বাধিক পঠনযোগ্য: val === false || val === true
  • এছাড়াও পাঠযোগ্য: typeof variable == typeof true
  • সংক্ষিপ্ততম, তবে মোটেও পঠনযোগ্য নয়: !!val === val

    ব্যাখ্যা:

    • [!!] দ্বৈত উদ্দীপনা চিহ্নটি মানটিকে বুলিয়ান রূপান্তর করে।
    • [===] ট্রিপল কঠোর সমতার জন্য সমান পরীক্ষার: প্রকার (বুলিয়ান) এবং মান উভয়ই সমান হতে হবে।
    • যদি মূল মানটি বুলিয়ান না হয় তবে এটি ট্রিপল সমান পরীক্ষায় উত্তীর্ণ হবে না। এটি যদি বুলিয়ান চলক হয় তবে এটি ট্রিপল সমান পরীক্ষায় উত্তীর্ণ হবে (উভয় প্রকার ও মান সহ)।

    পরীক্ষা:

    • !! 5 === 5 // মিথ্যা
    • !! 'পরীক্ষা' === 'পরীক্ষা' // মিথ্যা
    • চলুন ভাল = নতুন তারিখ (); !! ভাল === ভাল // মিথ্যা
    • !! সত্য === সত্য // সত্য
    • !! মিথ্যা === মিথ্যা // সত্য

0

নোডজে -তে নোড-বুলিফ ব্যবহার করে আমরা ইস- বুলিয়ান () ব্যবহার করতে পারি;

        var isBoolean = require('node-boolify').isBoolean;
        isBoolean(true); //true
        isBoolean('true'); //true
        isBoolean('TRUE'); //false
        isBoolean(1); //true
        isBoolean(2); //false
        isBoolean(false); //true
        isBoolean('false'); //true
        isBoolean('FALSE'); //false
        isBoolean(0); //true
        isBoolean(null); //false
        isBoolean(undefined); //false
        isBoolean(); //false
        isBoolean(''); //false

বুলিয়ান কি ঠিক তখনই প্রত্যাবর্তন করতে পারে যদি মান বুলিয়ান মান হয়
রতন উদয় কুমার

0

Es2015 তীর ফাংশন সহ আরও একটি সিদ্ধান্ত

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