জাভাস্ক্রিপ্টে সমস্ত মিথ্যা মান values


215

যে 'falsey' হয় জাভাস্ক্রিপ্ট মান কি কি যার অর্থ তারা মত এক্সপ্রেশন মিথ্যা হিসাবে মূল্যায়ন, if(value), value ?এবং !value?


আছে ইতিমধ্যে স্ট্যাক ওভারফ্লো উপর falsey মূল্যবোধের উদ্দেশ্যের কিছু আলোচনা , কিন্তু কোন সম্পূর্ণ সম্পূর্ণ উত্তর তালিকা কি সব falsey মান।

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




5
dorey.github.io/ জাভা স্ক্রিপ্ট- গুণমান- টেবিল একটি দুর্দান্ত উত্স এবং সত্যতার জন্য একটি if()ট্যাব রয়েছে ।
ক্লাউডফিট

4
বাহ, সত্যিই দরকারী, ধন্যবাদ! [[]] == ""তবে [] != []? আমার মাথা ব্যাথা করছে ...
ব্যবহারকারীর 6reinstatemonica8

ইসিএমএ 262 স্পেসিফিকেশন এই তুলনামূলক নিয়মগুলিকে বিশদভাবে সুনির্দিষ্টভাবে 11.9.1 থেকে 11.9.6 এর মধ্যে সেকেন্ডে রেখেছে: ecma-international.org/ecma-262/5.1/#sec-11.9.3 এই রেফারেন্সটি অন্তর্ভুক্ত করার জন্য আপনার উত্তরটি আপডেট করে দিলে এটি ফুলে উঠবে , যেহেতু এটি সত্য / মিথ্যা নির্ধারণগুলি কীভাবে করা উচিত (অনুমিত হওয়া উচিত) এর জন্য বিধিগুলি সরবরাহ করে।
শান উইলসন

উত্তর:


367

জাভাস্ক্রিপ্টে মিথ্যা মান

  • false
  • শূন্য Numberটাইপ: 0এবং -0, 0.0এবং হেক্স ফর্ম 0x0( ধন্যবাদ RBT )
  • শূন্য BigIntপ্রকারের: 0nএবং -0n(২০২০ সালে নতুন, ধন্যবাদ গেটমায়ারমোট জব )
  • "", ''এবং ``- দৈর্ঘ্যের স্ট্রিং 0
  • null
  • undefined
  • NaN
  • document.all (কেবলমাত্র এইচটিএমএল ব্রাউজারগুলিতে)
    • এটি একটি অদ্ভুত। document.allএকটি falsey বস্তুর সঙ্গে নয়, typeofযেমন undefined। আইই ১১ এর আগে এটি মাইক্রোসফ্ট-মালিকানাধীন ক্রিয়াকলাপ ছিল এবং এটি এইচটিএমএল অনুচ্ছেদে "জাভাস্ক্রিপ্টের নির্দিষ্টকরণের ইচ্ছাকৃত লঙ্ঘন" হিসাবে যুক্ত হয়েছিল যাতে আই এর জন্য লিখিত সাইটগুলি অ্যাক্সেস করার চেষ্টা করতে ব্যর্থ না হয়, উদাহরণস্বরূপ document.all.something,; if (document.all)শর্তযুক্ত মন্তব্যের আগে, এটি আইআই সনাক্ত করার একটি জনপ্রিয় উপায় হিসাবে ব্যবহৃত হত কারণ এটি মিথ্যা । দেখুন কেন document.all falsy হয়? বিস্তারিত জানার জন্য

"ফ্যালসি" এর সহজ অর্থ জাভাস্ক্রিপ্টের অভ্যন্তরীণ ToBooleanফাংশনটি ফিরে আসে false ToBooleanঅন্তর্নিহিত !value, value ? ... : ...;এবং if (value)। এখানে এর অফিসিয়াল স্পেসিফিকেশন (2020 ওয়ার্কিং ড্রাফ্ট) ( 1997 সালে প্রথম ECMAscript স্পেসিফিকেশন হওয়ার পরে কেবলমাত্র পরিবর্তনগুলি ES6 এর প্রতীকগুলির সংযোজন যা সর্বদা সত্য, এবং BigIntউপরে বর্ণিত:

অপরিশোধিত: মিথ্যা প্রত্যাবর্তন।  নাল: মিথ্যা প্রত্যাবর্তন।  বুলিয়ান: যুক্তি ফিরিয়ে দিন।  সংখ্যা: যুক্তি যদি +0, -0, বা NaN হয় তবে মিথ্যা প্রত্যাবর্তন করুন;  অন্যথায় সত্য ফিরে।  স্ট্রিং: যদি আর্গুমেন্টটি খালি স্ট্রিং হয় (এর দৈর্ঘ্য শূন্য), মিথ্যা প্রত্যাবর্তন করুন;  অন্যথায় সত্য ফিরে।  বিগআইন্ট: যুক্তি যদি 0n হয় তবে মিথ্যা প্রত্যাবর্তন করুন;  অন্যথায় সত্য ফিরে।  প্রতীক: সত্য ফিরে।  অবজেক্ট: সত্য ফিরে আসুন।


==(আলগা সাম্য) সাথে তুলনা

মিথ্যা মানগুলির ' আলগা তুলনা== ' এর সাথে কথা বলা মূল্যবান , যা ToNumber()অন্তর্নিহিত পার্থক্যের কারণে কিছু বিভ্রান্তি ব্যবহার করে এবং তৈরি করতে পারে। তারা কার্যকরভাবে তিনটি গ্রুপ গঠন:

  • false, 0, -0, "", '' সমস্ত একে অপরের সাথে মেলে ==
    • যেমন false == "", '' == 0এবং তাই4/2 - 2 == 'some string'.slice(11);
  • null, undefined তার সাথে মিল ==
    • যেমন null == undefinedতবেundefined != false
    • এটি উল্লেখ করার মতো বিষয়ও যে typeof nullফেরত দেওয়ার সময় কোনও বস্তু নয়'object' , nullএটি দীর্ঘস্থায়ী বাগ / কৌতুক যা সামঞ্জস্যতা বজায় রাখার জন্য ঠিক করা হয়নি was এটি সত্যিকারের বস্তু নয় এবং বস্তুগুলি সত্যবাদী ( document.allযখন " জাভাস্ক্রিপ্ট এইচটিএমএলে প্রয়োগ করা হয় তখন " ইচ্ছাশালী লঙ্ঘন "ব্যতীত )
  • NaN কিছু মেলে না, সঙ্গে ==বা ===, নিজেই এমনকি
    • যেমন NaN != NaN, NaN !== NaN, NaN != false,NaN != null

"কঠোর সাম্য" ( ===) সহ, এরকম কোনও গ্রুপিং নেই। শুধু false === false

অনেকগুলি বিকাশকারী এবং অনেক শৈলীর গাইড (যেমন স্ট্যান্ডার্ডজ ) পছন্দ করে ===এবং প্রায় কখনই ব্যবহার না করার একটি কারণ এটি ==


সত্যবাদী মান যে আসলে == false

"সত্যবাদী" এর সহজ অর্থ জাভাস্ক্রিপ্টের অভ্যন্তরীণ ToBooleanফাংশনটি ফিরে আসে trueজাভাস্ক্রিপ্টের সচেতন হওয়ার জন্য একটি স্পর্শ (এবং এর ===চেয়ে বেশি পছন্দ করার আরও একটি ভাল কারণ ==): এটি মান সত্যের ( ToBooleanপ্রত্যাবর্তন true) হওয়াও সম্ভব , তবে এটিও == false

আপনি হয়ত ভাবেন যে if (value && value == false) alert('Huh?')এটি একটি যৌক্তিক অসম্ভবতা যা ঘটতে পারে নি তবে এটি হবে, কারণ:

  • "0"এবং '0'- এগুলি খালি খালি স্ট্রিং, যা সত্য y তবে জাভাস্ক্রিপ্টের ==সমান সংখ্যক স্ট্রিংয়ের সাথে মিল আছে (উদাহরণস্বরূপ 42 == "42")। যেহেতু 0 == false, তাহলে "0" == 0, "0" == false
  • new Number(0)এবং new Boolean(false)- এগুলি হ'ল বস্তু, যা সত্যবাদী, তবে ==তাদের মানগুলি দেখে == false
  • 0 .toExponential(); - সংখ্যাসূচক মানের সমান একটি বস্তু 0
  • অনুরূপ যে কোনও নির্মাণ যা আপনাকে মিথ্যা-সমমানের মান দেয় যা সত্যবাদী in
  • [], [[]]এবং [0]( জাভাস্ক্রিপ্ট সমতা টেবিল লিঙ্কের জন্য ক্লাউডফিট ধন্যবাদ )

আরও কিছু সত্যবাদী মূল্যবোধ

এগুলি কেবলমাত্র কয়েকটি মান যা কিছু লোক মিথ্যা বলে আশা করতে পারে তবে সত্যবাদী truth

  • -1 এবং সমস্ত অ-শূন্য নেতিবাচক সংখ্যা
  • ' ', " ", "false", 'null'... সব স্ট্রিং যে শুধু হোয়াইটস্পেস তাদেরকেও খালি নয় এমন স্ট্রিং,
  • যে কোনও কিছুই typeof, যা সর্বদা একটি শূন্য খালি স্ট্রিং দেয়, উদাহরণস্বরূপ:

  • যে কোনও বস্তু ( document.allব্রাউজারগুলিতে "ইচ্ছাকৃত লঙ্ঘন" ব্যতীত ; মনে রাখবেন যে অন্যথায় প্রস্তাব দেওয়ার nullপরেও এটি আসলে কোনও বস্তু typeofনয়)। সহ:

    • {}
    • []
    • function(){}বা () => {}(খালি ফাংশন সহ কোনও ফাংশন)
    • Error এবং কোন উদাহরণ Error
    • যে কোনও নিয়মিত অভিব্যক্তি
    • new(অন্তর্ভুক্ত new Number(0)এবং new Boolean(false)) সহ যা কিছু তৈরি করা হয়েছে
  • যে কোনও প্রতীক

true, 1, "1"এবং [1]রিটার্ন trueযখন একে অপরকে তুলনায় ==


3
অবগতির জন্য, কি !, ifএবং ?..:কমন আছে যে, তারা অভ্যন্তরীণ কল ToBooleanমূল্যের ওপর ফাংশন। কিভাবে যারা মান প্রেক্ষাপটে আচরণ !, ifইত্যাদি ইতিমধ্যে তাদের নাম ক্ষেত্রে প্রযোজ্য হয়: তারা "falsy" মান। আমি একটু ভয় পেয়ে যা অন্যদের উত্তর পড়তে এবং মনে করবে আছি "ওহ তাই এই প্রেক্ষাপটে (ইন !, if, ?...:), মান false, কিন্তু সঙ্গে !!, এটা true" কিন্তু অন্তর্নিহিত ধারণা বুঝতে পারছি না। অন্য দুটি পয়েন্ট: 1) v ? true : falseএটি কেবল একটি ভারবজ উপায় !!v। 2) typeof সর্বদা একটি খালি খালি স্ট্রিং দেয়, যা সত্য।
ফেলিক্স ক্লিং

1
অর্থাৎ দেখার typeof nullবা typeof undefinedবিশেষভাবে দেখার কোনও অর্থ নেই । আপনি কেবল এটি বলতে পারেন যে খালি নয় স্ট্রিংগুলি সত্য।
ফেলিক্স ক্লিং

1
আমি দেখতে পাচ্ছি, তবে মূল প্রশ্নের সাথে এর কোনও যোগসূত্র নেই;) খুব বেশি কিছু সম্পর্কিত হলেও প্রাসঙ্গিক তথ্য যুক্ত করা পাঠকদের জন্য বিভ্রান্তিকর হতে পারে।
ফেলিক্স ক্লিং

5
আমি সবেমাত্র শিখেছি যে document.allএটি মিথ্যাও
ক্লাদিউ

3
আলগা তুলনা সম্পর্কে: যেহেতু বুলিয়ানরা সংখ্যায় রূপান্তরিত হয়, x == falseকল করবে ToNumber(x)যা একেবারে পৃথক ToBoolean(x)। ব্যাখ্যা করার মতো হতে পারে। এছাড়াও আমি কেবল লক্ষ্য করেছি যে আমি ইতিমধ্যে
বহু

3

খালি নন স্ট্রিং সম্পর্কে ভুলে যাবেন "false"যা মূল্যায়ন করেtrue


8
… এবং তাই কি মিথ্যা মান নয়, যার জন্য জিজ্ঞাসা করা হয়েছিল?
বার্গি

5
Touche। এটি এমন একটি মূল্য যা আপনি প্রত্যাখ্যান করে বলে আশা করতে পারেন এবং এটি নয়, যা এখনও সচেতন হওয়া মূল্যবান এবং আমি মনে করি, একটি বিস্তৃত তালিকায় যোগ্যতার উল্লেখ রয়েছে
MrMcPlad

4
তালিকায় যুক্ত হয়েছে ... তবে আসুন আমরা এটিকে সমস্ত সম্ভাব্য সত্যবাদী মানের একটি বৃহত তালিকায় পরিণত করার চেষ্টা করি না! এটি কিছুক্ষণ সময় নিতে চাই:-)
user56reinstatemonica8

3

কেবল @ ব্যবহারকারী568458 এর মিথ্যা মানগুলির তালিকায় যুক্ত করতে:

  • সংখ্যার 0 নম্বর ছাড়াও দশমিক সংখ্যা 0.0, 0.00 বা এই জাতীয় কোনও শূন্য সংখ্যাও একটি মিথ্যা মান।

    var myNum = 0.0;
    if(myNum){
        console.log('I am a truthy value');
    }
    else {
        console.log('I am a falsy value');
    }

    উপরে কোড স্নিপেট প্রিন্ট I am a falsy value

  • একইভাবে 0 নম্বরটির হেক্স উপস্থাপনাটিও নীচের কোড স্নিপেটে দেখানো মত একটি মিথ্যা মান value

    var myNum = 0x0; //hex representation of 0
    if(myNum){
        console.log('I am a truthy value');
    }   
    else {
        console.log('I am a falsy value');
    }

    উপরে কোড স্নিপেট আবার মুদ্রণ I am a falsy value


7
জাভাস্ক্রিপ্টের পূর্ণসংখ্যার সংখ্যা নেই। 0, 0x0, 0.0এবং 0.00একই আইইইই-754 64-বিট ফ্লোটিং পয়েন্ট মান শূন্য মাত্র বিভিন্ন লিটারেল হয়।
ফ্রেডওভারফ্লো

1

বিষয়টিকে যুক্ত করে, ES2020 অনুসারে আমাদের কাছে একটি নতুন মান রয়েছে যা মিথ্যা, এটি বিগআইন্ট শূন্য (0 এন):

0n == false // true
-0n == false // true

সুতরাং এর সাথে, এখন আমাদের মোট "" মিথ্যা "মান আছে (ডকুমেন্ট সহ নয়) উপরের ব্যবহারকারীরা উল্লিখিত হিসাবে এটি DOM এর অংশ এবং জেএস নয়)।


1
নিস! ধন্যবাদ, আমি এখনও এটি সম্পর্কে শুনিনি, আমি এটি উত্থাপনের জন্য আপনার উত্তর জমা দেওয়ার জন্য একটি লিঙ্ক সহ এটি বড় তালিকায় যুক্ত করেছি
user56reinstatemonica8
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.