জাভাস্ক্রিপ্টে, একটি খালি স্ট্রিং বুলিয়ান হিসাবে সর্বদা মিথ্যা?


134

জাভাস্ক্রিপ্টে,

var a = '';
var b = (a) ? true : false;

var bসেট করা হবে false

এটি কি নির্ভরযোগ্য আচরণ যা নির্ভর করা যায়?


আপনি কি নিশ্চিতরূপে, আমি হচ্ছি করছেন false: এখান jsfiddle.net/8CKbd
anubhava

আমি এটিকে আরও একধাপ এগিয়ে নিয়েছি। স্পেস সহ স্ট্রিং সত্য। যদি ('') {কনসোল.লগ ('!')} তবে '' == 0 সত্য।
আজাত

2
আমি মনে করি @ জোনএইচ সংস্করণটি ভুল, ''বুলিয়ান প্রসঙ্গে খালি স্ট্রিংটিকে মিথ্যা হিসাবে মূল্যায়ন করা হয় তাই যদি a = '';তবে a ? false : true=> '' ? false : true=> false ? false : true=> true(কারণ এটি একটি ভ্যালু মানের জন্য মূল্যায়ন)। আমি মনে করি এটি var b = (a) ? true : false;পরবর্তী বিবৃতি দিয়ে সঠিক হওয়া উচিত ।
ফোনিক্স

@ ফোনিক্স সম্পাদিত, আশা করি এটি এখন আরও অর্থবহ হবে।
সুইসকোডার

1
@ সুইসকোডার এটি পঠনযোগ্য নয় তবে এটির আরও একটি উত্তর দেয়। এখন আমি এটি সংশোধন করেছি।
ফোনিক্স

উত্তর:


191

হ্যাঁ. জাভাস্ক্রিপ্ট ECMAScript এর একটি উপভাষা, এবং ECMAScript ভাষার স্পেসিফিকেশন এই আচরণটির স্পষ্টভাবে সংজ্ঞা দেয়:

ToBoolean

ফলাফলটি মিথ্যা যদি যুক্তিটি খালি স্ট্রিং হয় (এর দৈর্ঘ্য শূন্য); অন্যথায় ফলাফল সত্য

Http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf থেকে নেওয়া উদ্ধৃতি


আআআন্ড এটি স্থির হয়েছে
অ্যান্টনি

28
একটি new String("")সতর্কতা সত্য যে ! এটি কারণ এটি একটি অবজেক্ট, যদিও সংক্ষিপ্ত রূপটি ""আদিম সংস্করণের প্রতিনিধিত্ব করে। একই জন্য new Number(0)এবং এমনকি যায় new Boolean(false)। আপনার কোডে অবজেক্টের সংস্করণগুলি ব্যবহার না করা ভাল কারণ, এবং এর অর্থ if (str.length)এই প্রান্তের কেসটি পরিচালনা করে যেখানে if (str)না হয় whereas
ক্রিস মিডলটন

54

হ্যাঁ. সকল false, 0খালি স্ট্রিং ''এবং "", NaN, undefined, এবং nullসবসময় মূল্যায়ন করা হয় false; অন্য সব কিছু true

এবং আপনার উদাহরণে, খ falseমূল্যায়নের পরে। (আমি মনে করি আপনি ভুল করে লিখেছেন true)


2
nullনয় false, তন্ন তন্ন true, nullহয় nulljsfiddle.net/sq1Lkpg0
ব্রুনো ফিঙ্গার

7
@ ব্রুনো, আপনি NaNএবং এর সাথে একই পরীক্ষা করতে পারবেন undefined। এগুলি নয় falseতবে তারা মিথ্যাবাদী। যা জিজ্ঞাসা করা হয়েছিল।
জোসেফ

11

var a = '';
var b = (a) ? false : true;   // fixed!
console.log(b);               // => true

var bসেট করা হবে true

এটি কি নির্ভরযোগ্য আচরণ যা নির্ভর করা যায়?

উপরোক্ত আলোচনা বললেন, হ্যাঁ , যে একটি খালি স্ট্রিং এর সংজ্ঞায়িত আচরণ একটি শর্তাধীন মধ্যে (একটি ifঅভিব্যক্তি, ||, &&, ? :, ...)। ( মানকটি বলে যে অভ্যন্তরীণ টুবুলিয়ান অপারেশন প্রয়োগ করতে হবে))

খালি স্ট্রিংটি তুলনা করে ( সত্য, সমতা এবং জাভাস্ক্রিপ্ট দেখুন ) ব্যবহার করা হলেও মূল্যায়ন আলাদা হয় , যদিও ফলাফল বেশিরভাগ ক্ষেত্রে একই থাকে :

// conditional (note: evaluation to false prints false here!)
console.log('' ? true : false); // zero length     => false

// comparisons
console.log('' == true);        // +0 === 1        => false
console.log('' == false);       // +0 === +0       => true
console.log('' === true);       // different types => false
console.log('' === false);      // different types => false

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

মোটামুটিভাবে বলতে গেলে, একটি সংজ্ঞায়িত, নন-নাল, নন-শূন্য, খালি-খালি, নন-ভ্যালু মানের জন্য জাভাস্ক্রিপ্ট কন্ডিশনাল ( টোবুলিয়ান ) পরীক্ষা (একটি খালি স্ট্রিংটি ... খালি, সংখ্যা -0 বা +0 হয় ... শূন্য, এনএএন কোনও সংজ্ঞায়িত সংখ্যা নয়, তবে একটি খালি অবজেক্ট দৃশ্যত সত্যই শূন্য নয়), বা যেমনটি আমি ভাবতে চাই, একটি (সত্য) জিনিসের জন্য শর্তসাপেক্ষ পরীক্ষা , যখন আপাত, সাবধানে রূপান্তরিত মানগুলির ( টোপ্রিমিটিভ , টোবার্বার ) তুলনা করা হয় তার operands, এবং জন্য দেখায় সঠিক অভিন্নতা=====

if (X) {}        // is X a (true) thing?
if (X == Y) {}   // are the values of X and Y same-ish?
if (X === Y) {}  // are X and Y exactly the same?

সেখানে আরও উদাহরণ আছে সত্য, সমতা এবং JavaScript যেখানে এই পার্থক্য সত্যিই গুরুত্বপূর্ণ, যেমন '0'হয় trueএকটি শর্তাধীন মধ্যে (নন-জিরো দৈর্ঘ্য, বা, এটা একটি জিনিস ), কিন্তু falseএকটি ==তুলনা ( মান শূন্য হয়)। '1'আবার, trueউভয় ক্ষেত্রে (এটি একটি জিনিস এবং একটি শূন্য-মান আছে)।

console.log('' ? true : false);   // zero length     => false
console.log('' == true);          // +0 === 1        => false
console.log('0' ? true : false);  // non-zero length => true
console.log('0' == true);         // +0 === 1        => false
console.log('1' ? true : false);  // non-zero length => true
console.log('1' == true);         //  1 === 1        => true


1
প্রথমে আমি ভেবেছিলাম, "পিএসএস, এটি ওভারকিল, এটি ইতিমধ্যে ভাল উত্তর দেওয়া হয়েছিল।" তবে সেটি বেশ উপস্থাপিত এবং তথ্যবহুল ছিল। ধন্যবাদ।
মার্ক এল।

8

var bসেট করা হবে true। এটি কারণ যে কোনও খালি স্ট্রিং জাভাস্ক্রিপ্টে একটি 'ফ্যালি' মান হিসাবে গণ্য হয় অন্য কয়েকটি মান হিসাবে values

মিথ্যা মানগুলির জন্য দয়া করে http://www.sitepoint.com/javascript-truthy-falsy/ দেখুন


আপনার উত্তরে আপনি ভুল। var bপ্রকৃতপক্ষে সেট করা হবে trueকারণ var aআপনি কোডটি দেখুন যদি এটির বিপরীত ।
বোম্বক

@ বোমব্যাক ধন্যবাদ - আমি উত্সাহিত করব। দেখে মনে হচ্ছে যে আসল প্রশ্নটি আমার উত্তরের পরে সম্পাদিত হয়েছিল (মানগুলি চারপাশে বদলে গেছে)
জোনাথন বলস্টার

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