জাভাস্ক্রিপ্ট: খালি অ্যারে, [] শর্তাধীন কাঠামোয় সত্য হিসাবে মূল্যায়ন করে। কেন?


100

আমি আমার কোডটিতে প্রচুর বাগের মুখোমুখি হয়েছিল কারণ আমি এই প্রকাশটি প্রত্যাশা করেছি:

Boolean([]); মিথ্যা যাও মূল্যায়ন।

এটি সত্য হিসাবে মূল্যায়ন হিসাবে এটি ক্ষেত্রে ছিল না।

সুতরাং, ফাংশনগুলি যা সম্ভবত এটির []মতো ফিরে আসে :

// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
  // ...

}else
{
  // ...
}

প্রত্যাশিত জিনিস না।

আমি কি []খালি অ্যারে ধরে ধরে ভুল করছি ?

এছাড়াও, এই আচরণটি কি সমস্ত ব্রাউজারে সামঞ্জস্য হয়? নাকি সেখানেও কোন গ্যাটাচস আছে? আমি গলগল ক্রোমে এই উপায়টি পর্যবেক্ষণ করেছি।


4
অ্যারেগুলি বস্তু, বস্তু সত্যবাদী। শুধু অ্যারের জন্য বলুন। দৈর্ঘ্য, শূন্য না হলে এটি সত্যবাদী হবে। আপনি যখন স্পষ্টরূপে বুলিয়ান রূপান্তর করেন, অ্যারে প্রথমে একটি খালি স্ট্রিংয়ে পরিণত হয়, তারপরে খালি স্ট্রিংটি মিথ্যাতে রূপান্তরিত হয়।
ডান্ডাভিস

4
আপনি ব্যবহার করবেন না কেন myCollection.length > 0?
স্টিভ 20

4
@Steve - যে না করবে না কাজ যদি myCollectionহতে হবে nullবা undefined। আপনার ব্যবহার করা দরকার if(myCollection && myCollection.length > 0)
টেড হপ

@ টেডহপ - অবশ্যই ... আমি কেবল ইঙ্গিত করছিলাম যে myCollection.length > 0একটি বুলিয়ান মান দেয় যা ওপি যা চেয়েছিল তা করে চলেছে ... তাকে সেখান থেকে এখনও কাজটি করা দরকার।
স্টিভ

উত্তর:


119

Http://www.sitepPoint.com/javascript-truthy-falsy/ থেকে

নিম্নলিখিত মানগুলি সর্বদা মিথ্যা:

  • মিথ্যা
  • 0 (শূন্য)
  • "" (খালি স্ট্রিং)
  • শূন্য
  • অপরিবর্তিত
  • NaN (একটি বিশেষ সংখ্যা মান যার অর্থ নং-এ-সংখ্যা!)

"0" (উদ্ধৃতিতে শূন্য), "মিথ্যা" (উদ্ধৃতিতে মিথ্যা), খালি ফাংশন, খালি অ্যারে এবং খালি বস্তু সহ অন্যান্য সমস্ত মান সত্যবাদী।

এটি কেন এমনটি সম্পর্কে , আমার সন্দেহ হয় কারণ জাভাস্ক্রিপ্ট অ্যারেগুলি কেবলমাত্র একটি নির্দিষ্ট ধরণের অবজেক্ট। অ্যারেগুলিকে বিশেষভাবে চিকিত্সা করার জন্য পরীক্ষার জন্য অতিরিক্ত ওভারহেডের প্রয়োজন হয় Array.isArray()। এছাড়াও, সত্যিকারের অ্যারেগুলি যদি এই প্রসঙ্গে অন্যান্য অ্যারে-জাতীয় বস্তুর থেকে আলাদা আচরণ করে, তবে এটি সম্ভবত বিভ্রান্তিকর হবে যখন সমস্ত অ্যারের মতো বস্তুগুলির আচরণ একইরকম করা আরও ব্যয়বহুল হবে।


28
আপনি যদি অভিব্যক্তিটি পরীক্ষা করেন তবে [] == falseএটি মূল্যায়ন করে true
m.rufca

4
@ m.rufca দেখুন stackoverflow.com/questions/5491605/...
Barmar

==আপনার পোস্ট করা লিঙ্কটিতে তুলনামূলক ব্যবহার করে অপ্রত্যাশিত পরিস্থিতি দেখানো একটি মুঠো টেবিল রয়েছে । সত্য বা মিথ্যা মূল্যায়নের প্রত্যাশা করার সময় আমি সাবধান হওয়ার জন্য মন্তব্য করেছি।
m.rufca

4
এটি সত্যিই প্রশ্নের উত্তর দেয় না, কারণটি ছিল। একটি খালি অ্যারে সত্য কেন, যখন একটি খালি স্ট্রিং মিথ্যা হয়? ইচ্ছাকৃতভাবে ডিজাইনের সিদ্ধান্ত হিসাবে এটি অত্যন্ত দুর্বল বোধ করে।
এসা লিন্ডকভিস্ট

4
সম্ভবত, কারণ এগুলি আদিম বস্তুর মতো কাজ করা প্রয়োজন। তবে জাভাস্ক্রিপ্টের প্রাথমিক অ্যারে নেই।
বর্মার

28

.lengthএটিতে কোনও উপাদান রয়েছে কিনা তা দেখার জন্য আপনাকে সেই অ্যারের পরীক্ষা করা উচিত ।

if (myCollection) // always true
if (myCollection.length) // always true when array has elements
if (myCollection.length === 0) // same as is_empty(myCollection)

@ মার্কসেলম স্টিভের এই মন্তব্যটি পুরানো, তিনি ডিভাইশোনকে অনুপস্থিত অবস্থার বিষয়ে অবহিত করেছিলেন "যখন অ্যারেতে উপাদান রয়েছে" , যা সম্পাদনাতে সংশোধন করা হয়েছিল ।
মুচাহো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.