অর্ধেক কাজ করে অনেক উত্তর। হ্যাঁ, !!X
"এক্সের সত্যতা [বুলিয়ান হিসাবে উপস্থাপিত]" হিসাবে পড়া যেতে পারে। তবে !!
বাস্তবিকভাবে বলা যায় না, একক ভেরিয়েবল সত্যবাদী বা মিথ্যা কিনা তা নির্ধারণের জন্য এতটা গুরুত্বপূর্ণ নয়। !!myVar === true
ঠিক হিসাবে একই myVar
। !!X
একটি "বাস্তব" বুলিয়ান সাথে তুলনা করা সত্যই কার্যকর নয়।
আপনি যা অর্জন করেন !!
তা হ'ল পুনরাবৃত্তযোগ্য, মানক (এবং জেএসলিন্ট বান্ধব) ফ্যাশনে একে অপরের বিরুদ্ধে একাধিক ভেরিয়েবলের সত্যতা যাচাই করার ক্ষমতা ।
কেবল কাস্টিং :(
এটাই...
0 === false
হয় false
।
!!0 === false
হয় true
।
উপরেরটি এতটা কার্যকর নয়। if (!0)
আপনি হিসাবে একই ফলাফল দেয় if (!!0 === false)
। আমি বুলিয়ানতে একটি পরিবর্তনশীল .ালাই এবং তারপরে "সত্য" বুলিয়ানের সাথে তুলনা করার জন্য ভাল মামলার কথা ভাবতে পারি না।
জেএসলিন্টের দিকনির্দেশগুলি থেকে "== এবং! =" দেখুন (দ্রষ্টব্য: ক্রোকফোর্ড তার সাইটটি কিছুটা ঘুরে দেখছেন; সেই লিঙ্কটি কিছুটা সময় মারা যাওয়ার জন্য দায়ী) কেন তার জন্য:
তুলনা করার আগে অপারেটররা == এবং! = টাইপ করুন এটি খারাপ কারণ এটি '\ t \ r \ n' == 0 টি সত্য হতে দেয়। এটি টাইপ ত্রুটিগুলি মাস্ক করতে পারে। জেএসলিন্ট নির্ভরযোগ্যভাবে নির্ধারণ করতে পারে না যে == সঠিকভাবে ব্যবহার করা হচ্ছে, সুতরাং == এবং! = ব্যবহার না করা এবং সর্বদা আরও নির্ভরযোগ্য === এবং! == অপারেটর ব্যবহার করা ভাল।
যদি আপনি কেবল যত্ন নেন যে কোনও মান সত্যবাদী বা মিথ্যা, তবে সংক্ষিপ্ত রূপটি ব্যবহার করুন। পরিবর্তে
(foo != 0)
শুধু বল
(foo)
এবং পরিবর্তে
(foo == 0)
বলে
(!foo)
নোট কিছু আছে unintuitive ক্ষেত্রে যেখানে একটি বুলিয়ান একটি সংখ্যা কাস্ট করা হবে ( true
কাস্ট করা হয় 1
এবং false
করতে 0
হলে নম্বরে একটি বুলিয়ান তুলনা)। এই ক্ষেত্রে, !!
মানসিকভাবে সহায়ক হতে পারে। যদিও, আবারও, এটি এমন একটি ক্ষেত্রে যেখানে আপনি একটি নন-বুলিয়ানকে একটি হার্ড-টাইপযুক্ত বুলিয়ানের সাথে তুলনা করছেন, এটি ইমো, একটি গুরুতর ভুল। if (-1)
এখনও এখানে যাওয়ার উপায়।
╔═══════════════════════════════════════╦═══════════════════╦═══════════╗
║ Original ║ Equivalent ║ Result ║
╠═══════════════════════════════════════╬═══════════════════╬═══════════╣
║ if (-1 == true) console.log("spam") ║ if (-1 == 1) ║ undefined ║
║ if (-1 == false) console.log("spam") ║ if (-1 == 0) ║ undefined ║
║ Order doesn't matter... ║ ║ ║
║ if (true == -1) console.log("spam") ║ if (1 == -1) ║ undefined ║
╠═══════════════════════════════════════╬═══════════════════╬═══════════╣
║ if (!!-1 == true) console.log("spam") ║ if (true == true) ║ spam ║ better
╠═══════════════════════════════════════╬═══════════════════╬═══════════╣
║ if (-1) console.log("spam") ║ if (truthy) ║ spam ║ still best
╚═══════════════════════════════════════╩═══════════════════╩═══════════╝
আপনার ইঞ্জিনের উপর নির্ভর করে জিনিসগুলি আরও ক্রেজিয়ার হয়ে ওঠে। উদাহরণস্বরূপ, ডাব্লুস্ক্রিপ্ট পুরস্কার জিতেছে।
function test()
{
return (1 === 1);
}
WScript.echo(test());
কারণ কিছু ঐতিহাসিক উইন্ডোজ Jive , যে করব আউটপুট -1 কে একটি বার্তা বক্সে! এটি একটি cmd.exe প্রম্পটে চেষ্টা করে দেখুন! তবে WScript.echo(-1 == test())
এখনও আপনাকে 0, বা ডাব্লুএসক্রিপ্ট দেয় false
। দূরে তাকান। এটা ঘৃণ্য।
সত্যতা তুলনা :)
তবে আমার যদি দুটি মান থাকে তবে আমার সমান ট্রুথি / ফলসী নেস পরীক্ষা করতে হবে?
আমাদের আছে myVar1 = 0;
এবং না myVar2 = undefined;
।
myVar1 === myVar2
হয় 0 === undefined
এবং স্পষ্টতই মিথ্যা।
!!myVar1 === !!myVar2
হয় !!0 === !!undefined
এবং সত্য! একই সত্যতা! (এক্ষেত্রে, উভয়েরই "মিথ্যাচারের সত্যতা আছে"))
সুতরাং "বুলিয়ান-castালাই ভেরিয়েবল" ব্যবহারের জন্য কেবলমাত্র সেই জায়গাটি যদি আপনার এমন কোনও পরিস্থিতি হত যেখানে আপনি যাচাই করছেন যে উভয় ভেরিয়েবালের একই সত্যতা আছে কিনা ? অর্থাৎ ব্যবহারের !!
আপনি যদি দুটি Vars দেখতে প্রয়োজন উভয় truthy বা উভয় falsy (অথবা না), যে, সমান (অথবা না) truthiness ।
আমি এই অফহ্যান্ডের জন্য একটি দুর্দান্ত, অ-চুক্তিবদ্ধ ব্যবহারের ক্ষেত্রে ভাবতে পারি না। হতে পারে আপনি কোনও ফর্মের সাথে "লিঙ্কযুক্ত" ক্ষেত্রগুলি রেখেছেন?
if (!!customerInput.spouseName !== !!customerInput.spouseAge ) {
errorObjects.spouse = "Please either enter a valid name AND age "
+ "for your spouse or leave all spouse fields blank.";
}
সুতরাং এখন যদি আপনার উভয়ের পক্ষে সত্যবাদিতা বা স্বামী / স্ত্রী এবং স্ত্রী উভয়ের জন্য মিথ্যা থাকে তবে আপনি চালিয়ে যেতে পারেন। অন্যথায় আপনি কেবল একটি মান (বা খুব তাড়াতাড়ি সাজানো বিবাহ) সহ একটি ক্ষেত্র পেয়েছেন এবং আপনার errorObjects
সংগ্রহে একটি অতিরিক্ত ত্রুটি তৈরি করতে হবে ।
সম্পাদনা 24 অক্টোবর 2017, 6 ফেব্রুয়ারী 19:
তৃতীয় পক্ষের গ্রন্থাগারগুলি যা সুস্পষ্ট বুলিয়ান মান আশা করে
এখানে একটি আকর্ষণীয় কেস ... !!
তৃতীয় পক্ষের লিবস সুস্পষ্ট বুলিয়ান মানগুলি প্রত্যাশা করতে পারে তখন কার্যকর হতে পারে।
উদাহরণস্বরূপ, জেএসএক্স-এ মিথ্যা (প্রতিক্রিয়া) এর একটি বিশেষ অর্থ রয়েছে যা সাধারণ মিথ্যাচারে ট্রিগার হয় না। আপনি যদি জেএসএক্সে নিম্নলিখিতগুলির মতো কিছু ফেরত দেওয়ার চেষ্টা করে থাকেন, তবে কোনও আন্তঃ প্রত্যাশার কথা messageCount
...
{messageCount && <div>You have messages!</div>}
... আপনি 0
যখন শূন্য বার্তা পেয়েছেন তখন প্রতিক্রিয়া রেন্ডার দেখে অবাক হতে পারেন । জেএসএক্স রেন্ডার না করার জন্য আপনাকে স্পষ্টতই মিথ্যা ফিরিয়ে দিতে হবে। উপরের বিবৃতিটি ফেরত দেয় 0
, যা জেএসএক্স খুশিভাবে রেন্ডার করে, যেমনটি করা উচিত। এটি আপনার কাছে Count: {messageCount && <div>Get your count to zero!</div>}
(বা কিছু কম অবদানযুক্ত) বলতে পারে না ।
একটি ফিক্সের সাথে ব্যাংবাং জড়িত, যা কোরেস 0
করে !!0
, যা false
:
{!!messageCount && <div>You have messages!</div>}
জেএসএক্স'র ডকস আপনাকে আরও সুস্পষ্ট হতে, স্ব-মন্তব্য করার কোডটি লিখতে এবং কোনও বুলিয়ানকে বল প্রয়োগের জন্য তুলনা ব্যবহার করার পরামর্শ দেয়।
{messageCount > 0 && <div>You have messages!</div>}
আমি নিজেকে একটি বার্নিশ দিয়ে মিথ্যাচার সামলাতে আরও স্বাচ্ছন্দ্য বোধ করি -
{messageCount ? <div>You have messages!</div> : false}
টাইপস্ক্রিপ্টে একই চুক্তি: আপনার যদি কোনও ফাংশন থাকে যা কোনও বুলিয়ান দেয় (বা আপনি বুলিয়ান ভেরিয়েবলের জন্য একটি মান নির্ধারণ করছেন), আপনি [সাধারণত] বুলিয়ান-ওয়াইয়ের মূল্য ফেরত / অর্পণ করতে পারবেন না; এটি একটি দৃ strongly়ভাবে টাইপ করা বুলিয়ান হতে হবে। এর মানে হল, iff myObject
শক্তিশালী ভাবে টাইপ করা হয় , return !myObject;
একটি ফাংশন জন্য কাজ একটি বুলিয়ান ফেরার কিন্তু return myObject;
না। আপনাকে return !!myObject
টাইপস্ক্রিপ্টের প্রত্যাশা মেলাতে হবে।
টাইপস্ক্রিপ্টের ব্যতিক্রম? যদি myObject
তা হয়ে থাকে তবে any
আপনি জাভাস্ক্রিপ্টের ওয়াইল্ড ওয়েস্টে ফিরে এসেছেন এবং এটির ছাড়াই ফিরে আসতে পারেন !!
, এমনকি আপনার রিটার্নের ধরণটি বুলিয়ান।
মনে রাখবেন যে এই JSX & টাইপ করা বিষয় নিয়মাবলী হয় না জাভাস্ক্রিপ্ট সহজাত বেশী ।
তবে আপনি যদি 0
আপনার রেন্ডার করা জেএসএক্সে অদ্ভুত কিছু দেখতে পান তবে শিথিল মিথ্যা ব্যবস্থাপনার জন্য ভাবেন।