আমি কীভাবে জাভাস্ক্রিপ্টে একটি স্ট্রিংকে বুলিয়ান রূপান্তর করতে পারি?


2546

আমি কি বুলিয়ান মান উপস্থাপনকারী একটি স্ট্রিং (উদাহরণস্বরূপ, 'সত্য', 'মিথ্যা') জাভাস্ক্রিপ্টের অভ্যন্তরীণ ধরণে রূপান্তর করতে পারি?

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

ক্ষেত্রটির বুলিয়ান মান নির্ধারণের জন্য আমি খুঁজে পেতে পেলাম একমাত্র উপায়, একবার এটি একটি স্ট্রিংয়ে রূপান্তরিত হয়েছিল, তার স্ট্রিং প্রতিনিধিত্বের আক্ষরিক মানের উপর নির্ভর করা।

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';

এটি সম্পাদন করার আরও ভাল উপায় আছে?


50
"এটি সম্পাদন করার আরও ভাল উপায় আছে কি?" - অবশ্যই আরও খারাপ উপায় আছে: ডিstring=(string==String(string?true:false))?(string?true:false):(!string?true:fa‌​lse);
মার্ক কে কোয়ান

3
স্ট্রিং এবং বুলগুলি সহজেই হ্যান্ডেল করুন:function parseBool(val) { return val === true || val === "true" }
উইকিনিলিয়ামস

1
@ মার্কfunction checkBool(x) { if(x) {return true;} else {return false;} }
সেবি

2
@ সেবি: আপনি এটি নথিভুক্ত করতে ভুলে গেছেন:if (checkBool(x) != false) { ... } else { ... }
কে কে কোয়ান

3
!!(parseInt(value) || value === "true")
অ্যান্ড্রু লুকা

উত্তর:


3470

না:

var isTrueSet = (myValue == 'true');

আপনি পরিচয় অপারেটর ( ===) ব্যবহার করে এটি আরও কঠোর করতে পারেন , যা তুলনামূলক ভেরিয়েবলগুলির মধ্যে সাম্যতা অপারেটর ( ==) এর পরিবর্তে বিভিন্ন ধরণের থাকে তবে কোনও প্রকারের রূপান্তর করে না ।

var isTrueSet = (myValue === 'true');

না:

আপনার নির্দিষ্ট প্রয়োজনের জন্য এই দুটি পদ্ধতি ব্যবহার করার ক্ষেত্রে আপনার সম্ভবত সতর্ক হওয়া উচিত :

var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

যে কোনও স্ট্রিং যা খালি স্ট্রিং নয় trueসেগুলি ব্যবহার করে তা মূল্যায়ন করবে । যদিও সেগুলি বুলিয়ান রূপান্তর সম্পর্কে আমি ভাবতে পারি তারতমতম পদ্ধতি, তবে আমি মনে করি যে আপনি যা খুঁজছেন তা সেগুলি নয়।


196
myValue === 'true';হুবহু সমান myValue == 'true';। এখানে ===ওভার ব্যবহার করে কোনও লাভ ==নেই।
টিম ডাউন

550
আমি ক্রকফোর্ডের পরামর্শ এবং ব্যবহার অনুসরণ করি ===এবং !==যখনই এটি বোধগম্য হয় যা প্রায় সর্বদা।
গিনাপগুলি

55
উদাহরণস্বরূপ, সমস্ত বড় হাতের "TRUE" সম্পর্কে কী?
বিএমইনার

102
@ গিন্যাপস আমি সাধারণত ক্রকফোর্ডের পরামর্শ অনুসরণ করি, তবে ==বনাম দৃশ্যটি আমি যে কয়েকটিতে না করি ===তার মধ্যে একটি। আমি সম্পূর্ণরূপে একমত নই যে এটি "প্রায় সর্বদা" ব্যবহার করার জন্য অর্থবোধ করে ===। আলতোভাবে টাইপ করা ভাষা বিদ্যমান কারণ আমরা প্রকারের বিষয়ে যত্ন নিতে চাই না; যদি আমরা এমন কিছু যাচাই if (price >= 50)করি যদি এটি স্ট্রিং হিসাবে শুরু হয় তবে আমাদের যত্ন নেই। আমি বলি, সবচেয়ে সময়, আমরা চাই ধরনের juggled হবে। বিরল ক্ষেত্রে যেখানে আমরা টাইপ জাগলিং (উদাহরণস্বরূপ if (price === null)) চাই না , তারপরে আমরা ব্যবহার করি ===। এই আমি বছর ধরে কি করেছো এবং আমি করেছি না একটি বিষয় ছিল।
জেএমটাইলার

168
@ জেএমটায়লার সম্ভবত পরবর্তী সময়ে রক্ষণাবেক্ষণ প্রোগ্রামারটিকে উপেক্ষা করছেন। সর্বদা সঠিক তুলনা অপারেটর ব্যবহার করুন! আপনি যদি উভয় পক্ষের প্রকারগুলি 'নিশ্চিতভাবে "জানেন তবে === ব্যবহার করবেন না, পরে আপনার কোডটি দেখার পরে আমার সেই জ্ঞান হবে না। যদি আপনার কোডটি পুনরায় ব্যবহার করা হয় তবে এটি একটি দুঃস্বপ্নে পরিণত হতে পারে। আপনি যদি চান তবে আপনার প্রকারগুলি 'জাগল' চান তবে '==' ব্যবহার করুন, তবে আপনার কোডটি আরও শক্ত করে তুলতে আরও অনেক জেএস দেব খুব সহজেই এতে ভ্রমণ করবে। বুলিয়ান 'সত্য' বোঝাতে আমি কতক্ষণ স্ট্রিং 'মিথ্যা' চাই?
আইকারু

685

সতর্কতা

এই অত্যন্ত upvoted উত্তরাধিকার উত্তর টেকনিক্যালি সঠিক কিন্তু শুধুমাত্র একটি খুব নির্দিষ্ট দৃশ্যকল্প জুড়ে, যখন আপনার স্ট্রিং মান ঠিক "true"বা "false"

নীচে এই ফাংশনগুলিতে একটি অবৈধ জসন স্ট্রিং পাস করেছে একটি ব্যতিক্রম ছুঁড়ে ফেলবে


আসল উত্তর:

কেমন?

JSON.parse("True".toLowerCase());

বা jQuery সহ

$.parseJSON("TRUE".toLowerCase());

62
এটির সাথে সমস্যাটি হ'ল অনেক সম্ভাব্য মান একটি পার্স ত্রুটি উত্পন্ন করে যা জেএস কার্যকর করা বন্ধ করে দেয়। সুতরাং JSON.parse ("FALSE") চালিয়ে জাভাস্ক্রিপ্ট বোমা দেয়। আমি মনে করি, প্রশ্নের মূল বিষয়টি কেবল এই সঠিক কেসগুলি সমাধান করার জন্য নয়, তবে অন্যান্য ক্ষেত্রেও নমনীয় হতে হবে।
বিশপজ

3
@ লুক এই সমাধানটি আসলে আমার যা প্রয়োজন তা হ'ল; ভাল, একটি চেষ্টা এ মোড়ানো ... যদিও ধরুন। আমি তখনই বুলে রূপান্তর করতে চেয়েছিলাম যদি এটি স্ট্রিংয়ের বুলিয়ান মান হয়; অন্যথায়, কেবল সরবরাহ করা স্ট্রিংটি ব্যবহার করুন। এইটা কাজ করে! ধন্যবাদ।
jedmao

47
এটি বলা খুব সহজ JSON.parse("TRUE".toLowerCase())যে এটি সঠিকভাবে পার্স করতে পারে।
ইয়াক

27
কেন অনেক উপকার আছে? এটি অদক্ষ এবং ভয়ঙ্কর next এর পরে আর কী? 'true'.length === 4?
মাকসিম ভি।

21
@MaksimVi। typeof str==="string"&& str.length===4&& str.charAt(0)==="t" && str.charAt(1)==="r" && str.charAt(2)==="u" && str.charAt(3)==="e"&& true===true && true!==false && false===false// ঠিক নিশ্চিত হতে
Vitim.us

223
stringToBoolean: function(string){
    switch(string.toLowerCase().trim()){
        case "true": case "yes": case "1": return true;
        case "false": case "no": case "0": case null: return false;
        default: return Boolean(string);
    }
}

43
আসলে এটি সরল করা যায়। 1) পরীক্ষা করার দরকার নেই "true", "yes"এবং "1"। 2) toLowerCaseফিরে আসে না null। 3) এখানে Boolean(string)হিসাবে একই string!==""। =>switch(string.toLowerCase()) {case "false": case "no": case "0": case "": return false; default: return true;}
রবার্ট

15
@ রবার্ট, দুর্দান্ত, তবে তার পরিবর্তে আমার ডিফল্ট থাকতে falseহবে।
drigoangelo

@drigoangelo রয়ে default: return true;অবশ্যই সম্ভব। তবে এটি ফাংশনটির আচরণকে পরিবর্তন করবে।
রবার্ট

2
: আমি এই সর্বোত্তম উত্তর ছিল, এবং এখানে এটা সম্প্রসারিত করতে চেয়েছিলেন stackoverflow.com/questions/263965/...
BrDaHa

9
আপনি যদি টটলওয়ারকেসে () কল করে ডেটা স্বাভাবিক করছেন, তবে আপনি হোয়াইটস্পেসটিও ছাঁটাই করতে ট্রিম () ছুঁড়ে ফেলতে চাইতে পারেন
জেগুগা

174

আমি মনে করি এটি অনেক সার্বজনীন:

if (String(a) == "true") ...

এটা যায়:

String(true) == "true"     //returns true
String(false) == "true"    //returns false
String("true") == "true"   //returns true
String("false") == "true"  //returns false

20
আপনি যখন বড় হাতের বা বুলিয়ান একটি স্ট্রিং পেতে পারেন, তারপরেString(a).toLowerCase() === 'true'
পাওলোয়া

String("what about input like this that isn't a bool?") == "true"
থমাস এডিং

6
@ থমাস এডিং মিথ্যা ... আপনি এটি কী ফিরে চান?
স্নোবার্ট

2
এমনকি String()কনস্ট্রাক্টর ব্যবহার না করেও সংক্ষিপ্ত করা যেতে পারে :true+'' === 'true' // true
টড

1
বিটিডাব্লু, 1 বা 0 এর জন্য এটি মিথ্যা বা সত্যের জন্যও দেওয়া উচিত
মিগুয়েল

128

মামলার সাথে মেলে মনে রাখবেন:

var isTrueSet = (myValue.toLowerCase() === 'true');

এছাড়াও, যদি এটি কোনও ফর্ম উপাদান চেকবক্স হয় তবে আপনি চেকবক্সটি চেক করা হয়েছে কিনা তাও সনাক্ত করতে পারেন:

var isTrueSet = document.myForm.IS_TRUE.checked;

ধরে নেওয়া যায় যে এটি চেক করা থাকলে, এটি সত্যের সমান "সেট" হয়। এটি সত্য / মিথ্যা হিসাবে মূল্যায়ন করে।


3
যদি এটি একটি ব্যতিক্রম নিক্ষেপ করা হবে myValueহতে হবে null, trueঅথবা অন্য কোনো ধরনের ...
mik01aj

115

আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারেন:

/*
 * Converts a string to a bool.
 *
 * This conversion will:
 *
 *  - match 'true', 'on', or '1' as true.
 *  - ignore all white-space padding
 *  - ignore capitalization (case).
 *
 * '  tRue  ','ON', and '1   ' will all evaluate as true.
 *
 */
function strToBool(s)
{
    // will match one and only one of the string 'true','1', or 'on' rerardless
    // of capitalization and regardless off surrounding white-space.
    //
    regex=/^\s*(true|1|on)\s*$/i

    return regex.test(s);
}

আপনি যদি স্ট্রিং ক্লাস প্রসারিত করতে চান তবে আপনি এটি করতে পারেন:

String.prototype.bool = function() {
    return strToBool(this);
};

alert("true".bool());

তাদের (মন্তব্যগুলি দেখুন) যারা স্ট্রিং অবজেক্টটি এটি পেতে প্রসারিত করতে চান তবে অঙ্কের বিষয়ে উদ্বিগ্ন এবং স্ট্রিং অবজেক্টকে প্রসারিত অন্যান্য কোডের সাথে সংঘাতের বিষয়ে উদ্বিগ্ন:

Object.defineProperty(String.prototype, "com_example_bool", {
    get : function() {
        return (/^(true|1)$/i).test(this);
    }
});
alert("true".com_example_bool);

(অবশ্যই পুরানো ব্রাউজারগুলিতে কাজ করবে না এবং ফায়ারফক্স মিথ্যা দেখায় অপেরা, ক্রোম, সাফারি এবং আইই সত্য দেখায়। বাগ 720760 )


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

41
@ ডিট্রেজো @ সিজমোনের সাথে আমি একমত নই। প্রোটোটাইপটি ওভারলোডিংয়ের জন্য ঠিক এটিই। যদি আপনি এটির জন্য (দুর্বল) কোড ভাঙার ভয় পান যা..এর উপর নির্ভর করে তবে গণনা থেকে বৈশিষ্ট্যগুলি আড়াল করার উপায় রয়েছে। দেখুন Object.defineProperty
ডিভাইস 1

কনভেনশন অনুসরণ করতে আমি এটিকে ডাকবparseBool
guzart

8
বুলিয়ান পার্সিং স্ট্রিং ক্লাসের অন্তর্ভুক্ত নয় .. আপনি সেখানে প্রচুর পরিমাণে জঞ্জাল পার্সার এবং রূপান্তর শেষ করবেন। -1 সাধারণত প্রোটোটাইপ পরিবর্তন করতে। ক্রস ব্রাউজারে কাজ না করে এমন সমাধানগুলিতে -1 দুর্বল ডিজাইনের জন্য -1।
থমাস ডব্লিউ

1
সমস্ত উত্তরের একটি পারফরম্যান্স তুলনা এখানে। stackoverflow.com/a/28588344/2824333
sospedra

49

কাঠ-চোখ সাবধান। শীর্ষস্থানীয় উত্তরটি 500+ আপভোটের সাথে প্রয়োগ করার পরে পরিণতিগুলি দেখার পরে, আমি এমন কিছু পোস্ট করতে বাধ্য বোধ করি যা বাস্তবে দরকারী:

আসুন সবচেয়ে ছোট, তবে খুব কড়া উপায় দিয়ে শুরু করুন:

var str = "true";
var mybool = JSON.parse(str);

এবং একটি যথাযথ এবং আরও সহনশীল উপায়ে শেষ করুন:

var parseBool = function(str) 
{
    // console.log(typeof str);
    // strict: JSON.parse(str)

    if(str == null)
        return false;

    if (typeof str === 'boolean')
    {
        return (str === true);
    } 

    if(typeof str === 'string')
    {
        if(str == "")
            return false;

        str = str.replace(/^\s+|\s+$/g, '');
        if(str.toLowerCase() == 'true' || str.toLowerCase() == 'yes')
            return true;

        str = str.replace(/,/g, '.');
        str = str.replace(/^\s*\-\s*/g, '-');
    }

    // var isNum = string.match(/^[0-9]+$/) != null;
    // var isNum = /^\d+$/.test(str);
    if(!isNaN(str))
        return (parseFloat(str) != 0);

    return false;
}

পরীক্ষামূলক:

var array_1 = new Array(true, 1, "1",-1, "-1", " - 1", "true", "TrUe", "  true  ", "  TrUe", 1/0, "1.5", "1,5", 1.5, 5, -3, -0.1, 0.1, " - 0.1", Infinity, "Infinity", -Infinity, "-Infinity"," - Infinity", " yEs");

var array_2 = new Array(null, "", false, "false", "   false   ", " f alse", "FaLsE", 0, "00", "1/0", 0.0, "0.0", "0,0", "100a", "1 00", " 0 ", 0.0, "0.0", -0.0, "-0.0", " -1a ", "abc");


for(var i =0; i < array_1.length;++i){ console.log("array_1["+i+"] ("+array_1[i]+"): " + parseBool(array_1[i]));}

for(var i =0; i < array_2.length;++i){ console.log("array_2["+i+"] ("+array_2[i]+"): " + parseBool(array_2[i]));}

for(var i =0; i < array_1.length;++i){ console.log(parseBool(array_1[i]));}
for(var i =0; i < array_2.length;++i){ console.log(parseBool(array_2[i]));}

কেবল মনে রাখবেন যে আপনি যদি প্রথম পদ্ধতিটি ব্যবহার করেন তবে পুরানো ব্রাউজারগুলির একটি জেএসএন পলিফিলের প্রয়োজন হতে পারে।
DRaehal

1
falseবুলিয়ান মানটির সাথে "মিথ্যা" স্ট্রিং কাস্ট করা কত দ্রুত JSON.parse? সিপিইউ হিসাবে, মেমরি কর্মক্ষমতা
সবুজ

ইতোমধ্যে মিথ্যা কিছু মুছে ফেলার (str)) ... with দিয়ে শুরু করা কি সহজ হবে না? এবং এর ভিতরে যদি শর্ত থাকে তবে কেবল সত্য ফিরে আসার বিষয়ে চিন্তা করতে হবে, কারণ আপনি ইতিমধ্যে মিথ্যা রিটার্ন দিয়ে শেষ করেছেন!
লার্ফোয়েড

মনে রাখবেন আপনি স্ট্রিং পরীক্ষার অনেকগুলি সংক্ষিপ্ত করতে পারেন (["সত্য", "হ্যাঁ", "1"]। সূচিপত্র (str.toLowerCase ()। ট্রিম ())! = -1) এবং এর ফলব্যাক ব্যবহার করতে পারেন বুলিয়ান (টিআর) 'নাল' এর মতো বিষয়গুলি কভার করতে
স্কট

37

আমি ভেবেছিলাম যে @ স্টিভেনের উত্তরটি সবচেয়ে ভাল, এবং আগত মানটি যদি কেবল একটি স্ট্রিং হয় তবে তার চেয়ে অনেক বেশি ক্ষেত্রে যত্ন নেওয়া হয়েছিল। আমি এটি কিছুটা প্রসারিত করতে এবং নিম্নলিখিতগুলি সরবরাহ করতে চেয়েছিলাম:

function isTrue(value){
    if (typeof(value) === 'string'){
        value = value.trim().toLowerCase();
    }
    switch(value){
        case true:
        case "true":
        case 1:
        case "1":
        case "on":
        case "yes":
            return true;
        default: 
            return false;
    }
}

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


আপনি এটি এক্সএমএল / এইচটিএমএল এলিমেন্টনোডস বৈশিষ্ট্যগুলি থেকে প্রাপ্ত জিনিসগুলি কভার হিসাবে আমি এটি ব্যবহার করিautocomplete="on"
ফিল্ক

2
আমি লাওয়ারকেস () এর আগে .trim () যুক্ত করতাম
লুইস লোবো

34

জেএসএন পার্সের সাথে সার্বজনীন সমাধান:

function getBool(val) {
    return !!JSON.parse(String(val).toLowerCase());
}

getBool("1"); //true
getBool("0"); //false
getBool("true"); //true
getBool("false"); //false
getBool("TRUE"); //true
getBool("FALSE"); //false

আপডেট (জেএসএন ছাড়াই):

function getBool(val){ 
    var num = +val;
    return !isNaN(num) ? !!num : !!String(val).toLowerCase().replace(!!0,'');
}

আমি এটি পরীক্ষা করার জন্য ফিডলও তৈরি করেছি http://jsfiddle.net/remunda/2GRhG/


1
'JSON ব্যতীত' সংস্করণটির কিছু ত্রুটি রয়েছে: Val = "0"; কনসোল.লগ (!! (+ ভাল || স্ট্রিং (ভাল)) সত্য উত্পাদন করে
এতিয়েন

3
getBool(undefined)আসল JSON সংস্করণ ব্যবহার করার সময় ক্রাশ হবে এবং ২ য় সংস্করণের জন্য সত্য হবে। এখানে একটি তৃতীয় সংস্করণ যা মিথ্যা ফিরিয়ে দেয়: ফাংশন getBool (ভাল) {var সংখ্যা; রিটার্ন ভাল! = নাল && (! isNaN (num = + ভাল)? !! সংখ্যা: !! স্ট্রিং (ভাল) .toLowerCase () প্রতিস্থাপন (!! 0, '')); }
রন মার্টিনেজ

31

আপনার সমাধান ঠিক আছে।

===ক্ষেত্রের valueসর্বদা একটি হবে হিসাবে ব্যবহার করা , এই ক্ষেত্রে কেবল নির্বোধ হবে String


17
আপনি কেন এটি ব্যবহার নিরীহ হবে বলে মনে করেন ===? পারফরম্যান্সের ক্ষেত্রে এটি উভয় প্রকারের স্ট্রিং হলে হুবহু এক হবে। যাই হোক, আমি বরং ব্যবহার ===যেহেতু আমি সবসময় ব্যবহার এড়াতে ==এবং !=। যুক্তি: stackoverflow.com/questions/359494/...
মারিয়ানো Desanze

3
যেহেতু valueসবসময় হতে হবে একটি stringতন্ন তন্ন ==না ===নিরীহ হয়। উভয়ই এই কাজের জন্য সঠিক সরঞ্জাম। এগুলি কেবল তখনই পৃথক হয় যখন প্রকারগুলি সমান নয় । যে ক্ষেত্রে ===কেবল ফেরৎ falseযখন ==তুলনা সামনে একটি জটিল জাভাস্ক্রিপ্টের এই মাতব্বরী অ্যালগরিদম সঞ্চালন করে।
রবার্ট

23
var falsy = /^(?:f(?:alse)?|no?|0+)$/i;
Boolean.parse = function(val) { 
    return !falsy.test(val) && !!val;
};

এই আয় falseপ্রত্যেক falsy মান এবং trueছাড়া প্রত্যেক truthy মানের জন্য 'false', 'f', 'no', 'n', এবং '0'(কেস-অবশ)।

// False
Boolean.parse(false);
Boolean.parse('false');
Boolean.parse('False');
Boolean.parse('FALSE');
Boolean.parse('f');
Boolean.parse('F');
Boolean.parse('no');
Boolean.parse('No');
Boolean.parse('NO');
Boolean.parse('n');
Boolean.parse('N');
Boolean.parse('0');
Boolean.parse('');
Boolean.parse(0);
Boolean.parse(null);
Boolean.parse(undefined);
Boolean.parse(NaN);
Boolean.parse();

//True
Boolean.parse(true);
Boolean.parse('true');
Boolean.parse('True');
Boolean.parse('t');
Boolean.parse('yes');
Boolean.parse('YES');
Boolean.parse('y');
Boolean.parse('1');
Boolean.parse('foo');
Boolean.parse({});
Boolean.parse(1);
Boolean.parse(-1);
Boolean.parse(new Date());

20

বুলিয়ান অবজেক্টে 'পার্স' পদ্ধতি নেই। Boolean('false')সত্য ফিরে আসে, যাতে কাজ করে না। !!'false'এছাড়াও ফিরে আসে true, যাতে কাজ করে না।

আপনি STRING চান 'true'বুলিয়ান ফিরে যাওয়ার trueএবং স্ট্রিং 'false'রিটার্ন বুলিয়ান করতে false, তারপর সহজ সমাধান ব্যবহার করা eval()eval('true')সত্য ফেরায় এবং eval('false')মিথ্যা প্রত্যাবর্তন করে। eval()যদিও ব্যবহার করার সময় পারফরম্যান্সের প্রভাবগুলি মনে রাখবেন ।


"ভুল" (বা ডান) কী আছে তা বোঝার জন্য - javascriptweblog.wordpress.com/2010/04/19/how-ivil-is-eval এর মতো নিবন্ধগুলি দেখুন বা 'জাভাস্ক্রিপ্ট ইভাল ম্যালওয়্যার' এর জন্য
স্ট্যাকওভারফ্লো

2
আমি সম্মত যে var isTrueSet = (myValue === 'true');এটি সেরা উত্তর।
thdoan

আমি এটা সংক্ষিপ্ত পছন্দ। তবে এটির মূল ক্ষেত্রে দর্শনীয়ভাবে ব্যর্থ হয় eval('TRUE'); আবার প্রমাণ করা, এটি eval()মন্দ।
স্নোম্যান

@ আরিয়া ৫১ গোয়েন্দা কথাসাহিত্য, একই ফ্যাশনে, JSON.parse('TRUE')নীচের উত্তরটিও দর্শনীয়ভাবে ব্যর্থ। জাভাস্ক্রিপ্টে কোনও ত্রুটির শর্তটিকে বাধ্য করা (বা কোনও ভাষা, সে ক্ষেত্রে) এটি বেশ সহজ। এটির জন্য অ্যাকাউন্ট হিসাবে, আপনার প্রথমে স্ট্রিংটি স্বাভাবিক করা উচিত, যেমনvar myValue = document.myForm.IS_TRUE.value.toLowerCase(); var isTrueSet = (myValue==='true' || myValue==='false') ? eval(myValue) : false;
do:

1
@ 10basetom: বেশ সঠিক। আপনি .toLowerCase()উত্তর অন্তর্ভুক্ত করা উচিত আমার বিষয়। আমি কিছুই জোর করার চেষ্টা করছি না। বড় বড় TRUEইউআই উইজেটগুলি দিয়ে ফেরত দেওয়ার জন্য একটি সাধারণ পর্যাপ্ত মান।
স্নোম্যান

16

আমি নিম্নলিখিত ব্যবহার:

function parseBool(b) {
    return !(/^(false|0)$/i).test(b) && !!b;
}

এই ফাংশনটি "মিথ্যা" (কেস সংবেদনশীল) এবং "0" স্ট্রিং বাদ দিয়ে স্বাভাবিক বুলিয়ান জোর করে।


16

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

ফলাফল সংক্ষিপ্ত (আরও ভালতর):

  1. শর্তাধীন বিবৃতি : 2,826,922
  2. বুল অবজেক্টে কেস স্যুইচ করুন : 2,825,469
  3. JSON- এ কাস্টিং : 1,867,774
  4. !! রূপান্তরসমূহ : 805,322
  5. স্ট্রিংয়ের প্রোটোটাইপ : 713,637

এগুলি সম্পর্কিত উত্তরের সাথে লিঙ্কযুক্ত যেখানে আপনি প্রতিটি সম্পর্কে আরও তথ্য (উপকারিতা এবং কনস) পেতে পারেন; বিশেষত মন্তব্যে।


jscreen পরীক্ষা দেখার চেষ্টা করার সময় "কিছু ভুল হয়েছে"
স্পটেডমাহন

16

এটি গ্রহণযোগ্য উত্তর থেকে নেওয়া হয়েছে, তবে সত্যই এটির একটি খুব দুর্বল বিন্দু রয়েছে এবং আমি হতবাক হয়েছি যে এটি কীভাবে উপসংহারের গণনা পেয়েছে, এতে স্ট্রিংয়ের ক্ষেত্রে আপনার সমস্যাটি বিবেচনা করতে হবে কারণ এটি কেস সংবেদনশীল is

var isTrueSet = (myValue.toLowerCase() === 'true');

13
Boolean.parse = function (str) {
  switch (str.toLowerCase ()) {
    case "true":
      return true;
    case "false":
      return false;
    default:
      throw new Error ("Boolean.parse: Cannot convert string to boolean.");
  }
};

2
আপনি আরও বেশি পরিষ্কার হতে "সত্য" এর পরিবর্তে true.toString () ব্যবহার করতে পারেন :-)
অবধি

গ্লোবালগুলি পরিবর্তন করবেন না, আপনার পরিবর্তনগুলি বিচ্ছিন্ন রাখার চেষ্টা করুন, সম্ভবত এর function parseBooleanপরিবর্তে একটি নতুন তৈরি করুন
স্টিল ব্রেন

13

আপনি যে অভিব্যক্তিটি সন্ধান করছেন তা হ'ল

/^true$/i.test(myValue)

হিসাবে হিসাবে

var isTrueSet = /^true$/i.test(myValue);

এই myValueনিয়মিত প্রকাশ, কেস-সংবেদনশীল এবং এই নমুনা পরিবর্তন করে না এর বিরুদ্ধে পরীক্ষা করে।

উদাহরণ:

/^true$/i.test("true"); // true
/^true$/i.test("TRUE"); // true
/^true$/i.test("tRuE"); // true
/^true$/i.test(" tRuE"); // false (notice the space at the beginning)
/^true$/i.test("untrue"); // false (some other solutions here will incorrectly return true
/^true$/i.test("false");// returns false
/^true$/i.test("xyz");  // returns false

12

উভয় স্ট্রিং ("সত্য", "মিথ্যা") এবং বুলিয়ান বুলিয়ান রূপান্তর করতে

('' + flag) === "true"

কোথায় flagহতে পারে

 var flag = true
 var flag = "true"
 var flag = false
 var flag = "false"

11

ইতিমধ্যে অনেক উত্তর উপলব্ধ আছে। তবে নিম্নলিখিতগুলি কিছু পরিস্থিতিতে কার্যকর হতে পারে।

// One can specify all values against which you consider truthy
var TRUTHY_VALUES = [true, 'true', 1];

function getBoolean(a) {
    return TRUTHY_VALUES.some(function(t) {
        return t === a;
    });
}

এটি কার্যকর হতে পারে যেখানে নন-বুলিয়ান মান সহ একটি উদাহরণ।

getBoolean('aa'); // false
getBoolean(false); //false
getBoolean('false'); //false

getBoolean('true'); // true
getBoolean(true); // true
getBoolean(1); // true

9

আমি এটি ব্যবহার করছি

String.prototype.maybeBool = function(){

    if ( ["yes", "true", "1", "on"].indexOf( this.toLowerCase() ) !== -1 ) return true;
    if ( ["no", "false", "0", "off"].indexOf( this.toLowerCase() ) !== -1 ) return false;

    return this;

}

"on".maybeBool(); //returns true;
"off".maybeBool(); //returns false;
"I like js".maybeBool(); //returns "I like js"

এটি ভাল, তবে কেবল স্ট্রিং টাইপের সাথে কাজ করে। কল্পনা করুন যে এই পরিবর্তনটি ব্যবহার করা যেতে পারে যা সম্ভবত "true"বা হয় true। দ্বিতীয়টি আসে, এটি কাজ করবে না। document.prototypeআমরা এটি যেখানেই চাই এটির ব্যবহার কি সম্ভব ?
মার্সেলো বারবোসা

এটি মার্জিত দেখাচ্ছে। দারূন কাজ! তবে, আমি লক্ষ্য করেছি যে বড় জেএস অ্যাপ্লিকেশনগুলিতে ওভারলোডিংয়ের বেসিক প্রোটোটাইপগুলি (এটির জন্য ইউনিট টেস্টিংয়ের প্রয়োজনও) কিছু অপ্রত্যাশিত আচরণের ফলস্বরূপ হতে পারে (যেমন, আপনি যখন প্রোটোটাইপ ওভারলোডেড একটি অ্যারের মাধ্যমে "for" দিয়ে পুনরাবৃত্তি করতে চান, আপনি পাবেন) কিছু বৈশিষ্ট্য যা আপনি সাধারণত প্রত্যাশা করবেন না)। তোমাকে সতর্ক করা হল. ;)
cassi.lup

আপনার একটি বৈকল্পিক যা বুলিয়ানকে খুব কার্যকরী করে স্ট্রিংঅরএলসে 2বুল (sob) {যদি (টাইপফ sob === "স্ট্রিং") {ফেরত ["না", "মিথ্যা", "0", "বন্ধ"] index সূচিপত্র (sob.toLowerCase) ())! == -1? সত্য মিথ্যা; } অন্যথায় {
ফিরুন

9

আপনি কেন এই জাতীয় কিছু চেষ্টা করবেন না

Boolean(JSON.parse((yourString.toString()).toLowerCase()));

এটি কোনও ত্রুটি ফিরিয়ে দেবে যখন কেস নির্বিশেষে সত্য বা মিথ্যা পরিবর্তে অন্য কোনও পাঠ্য দেওয়া হয় এবং এটি সংখ্যাগুলিও ক্যাপচার করবে

// 0-> false
// any other number -> true

9

এই ফাংশনটি বুলিয়ান সত্য / মিথ্যা পাশাপাশি স্ট্রিং পরিচালনা করতে পারে।

function stringToBoolean(val){
    var a = {
        'true':true,
        'false':false
    };
    return a[val];
}

নীচে বিক্ষোভ:

function stringToBoolean(val) {
  var a = {
    'true': true,
    'false': false
  };
  return a[val];
}

console.log(stringToBoolean("true"));

console.log(typeof(stringToBoolean("true")));

console.log(stringToBoolean("false"));

console.log(typeof(stringToBoolean("false")));

console.log(stringToBoolean(true));

console.log(typeof(stringToBoolean(true)));

console.log(stringToBoolean(false));

console.log(typeof(stringToBoolean(false)));

console.log("=============================================");
// what if value was undefined? 
console.log("undefined result:  " + stringToBoolean(undefined));
console.log("type of undefined result:  " + typeof(stringToBoolean(undefined)));
console.log("=============================================");
// what if value was an unrelated string?
console.log("unrelated string result:  " + stringToBoolean("hello world"));
console.log("type of unrelated string result:  " + typeof(stringToBoolean(undefined)));


8

সবচেয়ে সহজ উপায় হ্যান্ডস (আপনার ধারকটি 'সত্য' বা 'মিথ্যা' বলে ধরে নিবে):

var z = 'true';
var y = 'false';
var b = (z === 'true'); // will evaluate to true
var c = (y === 'true'); // will evaluate to false

এই ধরণের রূপান্তরগুলির জন্য সর্বদা == অপারেটরের পরিবর্তে === অপারেটরটি ব্যবহার করুন!


4
আপনি কোন রূপান্তর সম্পর্কে কথা বলছিলেন? :-)
ওয়াইএমএমডি

1
জাভাস্ক্রিপ্টে স্ট্রিংয়ের তুলনা করার সময় রূপান্তরগুলি ব্যবহার না করার সময় == বা === অপারেটর ব্যবহারের মধ্যে কোনও পার্থক্য নেই। এখানে আপনি স্ট্রিংয়ের সাথে তুলনা করছেন, সুতরাং কোনও ধরণের রূপান্তর নেই। দেখুন stackoverflow.com/questions/359494/...
ars265

8

@ শ্যাডো 2531 যেমন বলেছেন, আপনি কেবল এটি সরাসরি রূপান্তর করতে পারবেন না। আমি আপনার পরামর্শ দিচ্ছি যে আপনি যদি "কোড" পুনরায় ব্যবহার / ব্যবহার করতে যাচ্ছেন তবে "সত্য" এবং "মিথ্যা" ছাড়াও "সত্য" এবং "মিথ্যা" ছাড়াও স্ট্রিং ইনপুটগুলি বিবেচনা করুন। এটি আমি ব্যবহার করি:

function parseBoolean(string) {
  switch (String(string).toLowerCase()) {
    case "true":
    case "1":
    case "yes":
    case "y":
      return true;
    case "false":
    case "0":
    case "no":
    case "n":
      return false;
    default:
      //you could throw an error, but 'undefined' seems a more logical reply
      return undefined;
  }
}

7

আপনাকে আপনার নির্বাচনের মূল্য এবং সেই মানটির উপস্থাপনা আলাদা করতে হবে।

জাভাস্ক্রিপ্ট যুক্তিযুক্ত একটি বিন্দু বাছাই করুন যেখানে তাদের স্ট্রিং সেন্ডিনেল থেকে নেটিভ টাইপে রূপান্তর করতে হবে এবং সেখানে একটি তুলনা করতে হবে, সম্ভবত যেখানে এটি প্রতিটি মানের জন্য একবার পরিণত হয় যা রূপান্তরিত হওয়া দরকার। স্ট্রিং সেন্ডিনেল যদি স্ক্রিপ্টটি জানে না তবে কী হওয়ার দরকার তা মনে রাখবেন (যেমন আপনি কি সত্য বা মিথ্যাতে ডিফল্ট হন?)

অন্য কথায়, হ্যাঁ, আপনাকে স্ট্রিংয়ের মানের উপর নির্ভর করতে হবে। :-)


7

আমার এই প্রশ্নটি গ্রহণ করা হ'ল এটি তিনটি উদ্দেশ্য পূরণ করতে লক্ষ্য করে:

  • সত্য এবং মিথ্যা মানগুলির জন্য সত্য / মিথ্যা প্রত্যাবর্তন করুন, তবে একাধিক স্ট্রিং মানগুলির জন্য সত্য / মিথ্যাও প্রত্যাবর্তন করুন যা সত্যের বা মিথ্যা হবে যদি তারা স্ট্রিংয়ের পরিবর্তে বুলিয়ান হয়।
  • দ্বিতীয়ত, একটি স্থিতিস্থাপক ইন্টারফেস সরবরাহ করুন যাতে নির্দিষ্ট করা ব্যতীত অন্য মানগুলি ব্যর্থ হয় না, বরং একটি ডিফল্ট মান ফেরত দেয়
  • তৃতীয়ত, যতটা সম্ভব সামান্য কোড দিয়ে এগুলি করুন।

জেএসএন ব্যবহার করে সমস্যাটি এটি জাভাস্ক্রিপ্ট ত্রুটির কারণে ব্যর্থ হয়েছে। এই সমাধানটি স্থিতিস্থাপক নয় (যদিও এটি 1 এবং 3 সন্তুষ্ট করে):

JSON.parse("FALSE") // fails

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

if(value === "TRUE" || value === "yes" || ...) { return true; }

আমি টাইপকাস্ট.জেএস-এর জন্য এই সঠিক সমস্যাটি সমাধানের জন্য কাজ করছি । এবং তিনটি উদ্দেশ্যই এর সর্বোত্তম সমাধান হ'ল:

return /^true$/i.test(v);

এটি অনেক ক্ষেত্রে কাজ করে, {like এর মতো মানগুলি পাস করার পরে ব্যর্থ হয় না এবং খুব সংক্ষিপ্ত হয়। এছাড়াও এটি অনির্ধারিত বা একটি ত্রুটি নিক্ষেপের পরিবর্তে ডিফল্ট মান হিসাবে মিথ্যা প্রদান করে, যা আলগাভাবে টাইপযুক্ত জাভাস্ক্রিপ্ট বিকাশে আরও কার্যকর। অন্যান্য উত্তর ব্র্যাভো যে এটি প্রস্তাব!


কেবল আপনার উদ্দেশ্যগুলিতে ফিরে যেতে, আপনার তৃতীয় ও সর্বোত্তম সমাধানের একমাত্র সমস্যাটি হ'ল এটি উদ্দেশ্য # 1 এর সাথে মেলে না - এটি কেবল কোনও মান হিসাবে সত্য হবে 'true', তবে কোনও সত্যবাদী ইনপুট নয়। এটি উদ্দেশ্য # 1 এর সাথে মিলিত হওয়ার জন্য, এটি # 2 সমাধানের চেয়ে কিছুটা কম সংক্ষিপ্ত এবং আরও কম পাঠযোগ্য।
জেএমটাইলার

return /^(true|yes|1|t|y)$/i.test(str);
কেভিন বাউচার

7

আমি একটু দেরি করে ফেলেছি, কিন্তু আমি এই কাজ করতে একটু স্নিপেট আছে, এটা মূলত বজায় রাখে JScripts সব truthey / falsey / অকথ্য -ness কিন্তু অন্তর্ভুক্ত"false" মিথ্যা একটি acceptible মান হিসাবে।

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

var value = "false";
var result = (value == "false") != Boolean(value);

// value = "true"  => result = true
// value = "false" => result = false
// value = true    => result = true
// value = false   => result = false
// value = null    => result = false
// value = []      => result = true
// etc..

7

অন্য একটি সমাধান। jsFiddle

var toBoolean = function(value) {
    var strValue = String(value).toLowerCase();
    strValue = ((!isNaN(strValue) && strValue !== '0') &&
        strValue !== '' &&
        strValue !== 'null' &&
        strValue !== 'undefined') ? '1' : strValue;
    return strValue === 'true' || strValue === '1' ? true : false
};

পরীক্ষার কেস নোডে চালিত হয়

> toBoolean(true)
true
> toBoolean(false)
false
> toBoolean(undefined)
false
> toBoolean(null)
false
> toBoolean('true')
true
> toBoolean('True')
true
> toBoolean('False')
false
> toBoolean('false')
false
> toBoolean('0')
false
> toBoolean('1')
true
> toBoolean('100')
true
> 

6

পবিত্র godশ্বর এই উত্তরগুলির মধ্যে কিছু হ'ল বন্য। আমি জেএস এবং এটির একটি চামড়ার চামড়া করার অসীম উপায়গুলি পছন্দ করি।

আমার পছন্দ, যা আমি ইতিমধ্যে না দেখে হতবাক হয়েছি, তা হ'ল:

testVar = testVar.toString().match(/^(true|[1-9][0-9]*|[0-9]*[1-9]+|yes)$/i) ? true : false;

5
function parseBool(value) {
    if (typeof value === "boolean") return value;

    if (typeof value === "number") {
        return value === 1 ? true : value === 0 ? false : undefined;
    }

    if (typeof value != "string") return undefined;

    return value.toLowerCase() === 'true' ? true : false;
}

স্ট্রিংয়ের জন্য, আমি ব্যক্তিগতভাবে trueআপনার মতো "সত্য" এর জন্য ফিরে এসেছি তবে falseকেবল "মিথ্যা" এবং undefinedঅন্যথায়। পূর্বে পূর্ণসংখ্যার কেস দিয়ে আপনি কী তৈরি করেছেন তা বাছাই করুন।
পিয়েরে-অ্যাড্রিয়েন বুইসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.