জাভাস্ক্রিপ্টে বুলিয়ান ঘোষণা কেবলমাত্র var ব্যবহার করে


89

আমি যদি জাভা স্ক্রিপ্টের বুলিয়ান ভেরিয়েবলটিকে এভাবে ঘোষণা করি:

var IsLoggedIn;

এবং তারপরে এটিকে আরম্ভ করুন trueবা 1, এটি নিরাপদ? বা 1ভেরিয়েবলকে একটি সংখ্যা তৈরি করে এটি সূচনা করবে ?


27
এটি "সুরক্ষিত" বলতে আপনার বোঝার উপর নির্ভর করে, জাভাস্ক্রিপ্টে কোনও "নিরাপদ" নেই।
অ্যান্থনিডব্লোন জোন্স

উত্তর:


167

প্রকারগুলি আপনার প্রারম্ভিককরণের উপর নির্ভরশীল:

var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool

তবে এই উদাহরণটি একবার দেখুন:

var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean

আপনার ভেরিয়েবলের ধরণ জাভাস্ক্রিপ্টে নির্ধারিত মানের উপর নির্ভর করে।


4
যদি আমি সরাসরি বুলিয়ান হিসাবে পরিবর্তনশীল ঘোষণা করি তবে কী হবে what এটিই কোনও পারফরম্যান্সের
উন্নতি ঘটায়

20

না এটি নিরাপদ নয়। আপনি পরে var করতে পারেন IsLoggedIn = "Foo";এবং জাভাস্ক্রিপ্ট কোনও ত্রুটি নিক্ষেপ করবে না।

এটা করা সম্ভব

var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);

আপনি নন বুলিয়ান পরিবর্তনশীলটিকেও এর মধ্যে পাস করতে পারবেন new Boolean()এবং এটি ইসলোগডইন বুলিয়ান তৈরি করবে।

var IsLoggedIn = new Boolean(0); // false
var IsLoggedIn = new Boolean(NaN); // false
var IsLoggedIn = new Boolean("Foo"); // true
var IsLoggedIn = new Boolean(1); // true

6
নতুন বুলিয়ান () ব্যবহার করবেন না; ইসলগডইন সেই সমস্ত পরিস্থিতিতে সত্যকে মূল্যায়ন করবে (হ্যাঁ, নতুন বুলিয়ান সত্য (সত্য) সত্য)।
মাইলস

@Miles: নতুন বুলিয়ান (মিথ্যা) মিথ্যাতে থাকে সত্য
জানুয়ারী

4
@jan: if (new Boolean(false)) alert ('wat')দেখুন stackoverflow.com/a/8695363
মাইলস

@Miles অবিশ্বাস্য, যেমন (new Boolean(false)).toString()) === "false", ধন্যবাদ লিঙ্কের জন্য
জানুয়ারী

10

যেমন এটি খুব দরকারী টিউটোরিয়াল বলে:

var age = 0;

// bad
var hasAge = new Boolean(age);

// good
var hasAge = Boolean(age);

// good
var hasAge = !!age;

সম্ভবত কোন বাস্তব ব্যাখ্যা। কোনও টিউটোরিয়াল দিয়ে কেউ ঝুঁটি দিতে চায় না আপনি নিজের পোস্টে একটি টিএল; ডাঃ উল্লেখ করতে পারেন
হিমি

7

আপনি যদি IsLoggedInবুলিয়ান হিসাবে চিকিত্সা করতে চান তবে আপনার নীচের মত শুরু করা উচিত:

var IsLoggedIn=true;

আপনি যদি এটি দিয়ে আরম্ভ করেন var IsLoggedIn=1;তবে এটি একটি পূর্ণসংখ্যা হিসাবে বিবেচিত হবে।

তবে যে কোনও সময়ে ভেরিয়েবলটি IsLoggedInএকটি ভিন্ন ডেটা ধরণের উল্লেখ করতে পারে:

 IsLoggedIn="Hello World";

এটি কোনও ত্রুটির কারণ হবে না।


5

আপনি অন্তত তাদের 'সংজ্ঞা' এর জন্য অবিচ্ছিন্ন ভেরিয়েবলগুলি ব্যবহার করতে এবং পরীক্ষা করতে পারেন। এটার মত:

var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false

তদুপরি, অনেকগুলি সম্ভাব্য লোক রয়েছে: আপনি যদি সঠিক ধরণের বিষয়ে আগ্রহী না হন তবে তুলনার জন্য '==' অপারেটর (বা! [পরিবর্তনশীল] / !! [পরিবর্তনশীল]) ব্যবহার করুন (এটি ডগলাস ক্রকফোর্ড 'সত্যবাদী' বা ' মিথ্যা 'আমি মনে করি)। সেক্ষেত্রে এককীকরণযুক্ত ভেরিয়েবলকে সত্য বা 1 বা '1' বরাদ্দ করা জিজ্ঞাসা করা হলে সর্বদা সত্য ফিরে আসে returns অন্যথায় [আপনার যদি সুরক্ষার তুলনা প্রকারের প্রয়োজন হয়] তুলনার জন্য '===' ব্যবহার করুন।

var thisMayBeTrue;

thisMayBeTrue = 1;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false

thisMayBeTrue = '1';
alert(thisMayBeTrue == true); //=> true 
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, in this case, using == or !! '1' is implicitly 
// converted to 1 and 1 is implicitly converted to true)

thisMayBeTrue = true;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> true

thisMayBeTrue = 'true';
alert(thisMayBeTrue == true); //=> false
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, here's no implicit conversion of the string 'true'
// it's also a demonstration of the fact that the 
// ! or !! operator tests the 'definedness' of a variable.

পিএস: যদিও আপনি নক্সিস্টিং ভেরিয়েবলের জন্য 'সংজ্ঞা' পরীক্ষা করতে পারবেন না। সুতরাং:

alert(!!HelloWorld);

একটি রেফারেন্স ত্রুটি দেয় ('হ্যালো ওয়ার্ল্ড সংজ্ঞায়িত করা হয়নি')

('সংজ্ঞায়িত' জন্য আরও ভাল শব্দ আছে? যাইহোক আমার ডাচ ক্ষমা করুন; ~)


আপনি আপনার স্ট্রিং thisMayBeTrue = '';কেসগুলিকে খালি স্ট্রিং দিয়ে আবার চেষ্টা করতে পছন্দ করতে পারেন - খালি স্ট্রিং মিথ্যা হওয়ায় আপনি একই ফলাফল পাবেন না। | "PS: আপনি যা করতে পারেন না পরীক্ষা যদিও ভেরিয়েবল nonexisting জন্য 'definedness'" - আপনি যা করতে পারেন: typeof HellowWorld === 'undefined'
nnnnnn

2

জাভাস্ক্রিপ্টের ভেরিয়েবলগুলির কোনও প্রকার নেই। অ-শূন্য, নন-নাল, খালি নয় এবং trueএটি "সত্য"। শূন্য, নাল, অপরিজ্ঞাত, খালি স্ট্রিং এবং false"মিথ্যা"।

এখানে একটি বুলিয়ান প্রকার রয়েছে, যেমনটি আক্ষরিক trueএবং false


জেএস ভেরিয়েবলের এই ধারণায় কোনও প্রকার নেই যে আপনি কোনও ভেরিয়েবল ঘোষণা করতে পারবেন না যা কেবলমাত্র পূর্ণসংখ্যা বা স্ট্রিং ধরে রাখবে (যেমন কিছু অন্যান্য ভাষায় ঘটে) তবে নির্দিষ্ট সময়ে ভেরিয়েবলের দ্বারা নির্দিষ্ট মানটি সর্বদা থাকবে একটি টাইপ. এবং টাইপ হিসাবে মত সরল উদাহরণ দেখানো যেতে পারে গুরুত্বপূর্ণ 2 + 2বনাম "2" + 2। আরও দেখুন typeofঅপারেটর
nnnnnn

2

কিভাবে ভালো কিছু সম্পর্কে:

var MyNamespace = {
    convertToBoolean: function (value) {
        //VALIDATE INPUT
        if (typeof value === 'undefined' || value === null) return false;

        //DETERMINE BOOLEAN VALUE FROM STRING
        if (typeof value === 'string') {
            switch (value.toLowerCase()) {
                case 'true':
                case 'yes':
                case '1':
                    return true;
                case 'false':
                case 'no':
                case '0':
                    return false;
            }
        }

        //RETURN DEFAULT HANDLER
        return Boolean(value);
    }
};

তারপরে আপনি এটি ব্যবহার করতে পারেন:

MyNamespace.convertToBoolean('true') //true
MyNamespace.convertToBoolean('no') //false
MyNamespace.convertToBoolean('1') //true
MyNamespace.convertToBoolean(0) //false

পারফরম্যান্সের জন্য আমি এটি পরীক্ষা করে দেখিনি, তবে ধরণের থেকে অন্য ধরণের রূপান্তরিত হওয়া খুব ঘন ঘন ঘটে না অন্যথায় আপনি আপনার অ্যাপটি অস্থিরতার জন্য খোলেন!


4
ডাউন ভোট কেন? দয়া করে ব্যাখ্যা করুন যাতে আমরা সবাই উপকার করতে পারি।
TruMan1

1

ভেরিয়েবল আপনি যা টাইপ করেন তা হয়ে যাবে। প্রাথমিকভাবে এটি হয় undefined। আপনি যদি এটি নির্ধারণ করেন তবে 'true'এটি একটি স্ট্রিং হয়ে যাবে, আপনি যদি এটি নির্ধারণ করেন তবে trueএটি একটি বুলিয়ান হয়ে যাবে, আপনি যদি এটি নির্ধারণ করেন তবে 1এটি একটি সংখ্যা হয়ে যাবে। পরবর্তী কাজগুলি ভেরিয়েবলের ধরণ পরে পরিবর্তন করতে পারে।

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