مقایسه دو چیز برای برابری اغلب می تواند توسعه دهنده ناخواسته جاوا اسکریپت را با مشکل مواجه کند ، زیرا این زبان دارای چندین ویژگی است که باید از آنها آگاه باشیم.

در این مقاله ، ما به این دلیل خواهیم پرداخت که چگونه عملگرهای دو و سه برابر را بررسی کنیم ، و همچنین مفهوم ارزشهای صادق و نادرست در جاوا اسکریپت را بررسی کنیم. وقتی خواندن را به پایان رساندید ، خواهید فهمید که چگونه جاوا اسکریپت مقایسه های خود را انجام می دهد و همچنین چگونه ارزش های درست و غلط می تواند به شما در نوشتن کد تمیزتر کمک کند.

حقیقت و نادرستی: وقتی همه چیز در جاوا اسکریپت یکسان نباشد

تایپ در جاوا اسکریپت

متغیرهای جاوا اسکریپت به صورت پویا/نادرست تایپ می شوند و زبان برای اظهارنظر یا تغییر مقدار اهمیتی ندارد:

let x;
x = 1;   
x = '1'; 
x = [1]; 

مقادیر ظاهراً متفاوت با true در مقایسه با == (تساوی شل یا انتزاعی) زیرا جاوا اسکریپت (به طور موثر) قبل از مقایسه هر کدام را به نمایش رشته تبدیل می کند:


1 == '1';
1 == [1];
'1' == [1];

حقیقت و نادرستی: وقتی همه چیز در جاوا اسکریپت یکسان نباشد

واضح تر false نتیجه در مقایسه با === (برابری شدید) زیرا نوع در نظر گرفته شده است:


1 === '1';
1 === [1];
'1' === [1];

به صورت داخلی ، جاوا اسکریپت مقدار را به یکی از هفت نوع داده اولیه تعیین می کند:

  • تعریف نشده (متغیری بدون مقدار تعریف شده)
  • تهی (یک مقدار تهی واحد)
  • بولی (a true یا false مقدار)
  • شماره (این شامل Infinity و NaN – نه یک عدد!)
  • BigInt (یک عدد صحیح بزرگتر از 2^53 – 1)
  • رشته (داده های متنی)
  • نماد (جدید ابتدایی منحصر به فرد و تغییر ناپذیر در ES6/2015)

همه چیز دیگر یک Object است – از جمله آرایه ها.

حقیقت و نادرستی: وقتی همه چیز در جاوا اسکریپت یکسان نباشد

ارزش های راست و دروغ در جاوا اسکریپت

علاوه بر نوع ، هر مقدار نیز دارای یک مقدار بولین ذاتی است که عموماً به عنوان یکی از آنها شناخته می شود راستگو یا کذببه برخی از قوانین کمی عجیب هستند ، بنابراین درک مفاهیم و تأثیر در مقایسه به اشکال زدایی برنامه های جاوا اسکریپت کمک می کند.

مقادیر زیر هستند همیشه نادرست:

  • false
  • 0 (صفر)
  • -0 (منهای صفر)
  • 0n (BigInt صفر)
  • ''، ""، `` (رشته خالی)
  • null
  • undefined
  • NaN

همه چیز دیگر است راستگوبه که شامل:

  • '0' (رشته ای حاوی یک صفر واحد)
  • 'false' (رشته ای حاوی متن “false”)
  • [] (یک آرایه خالی)
  • {} (یک شیء خالی)
  • function(){} (یک عملکرد “خالی”)

بنابراین می توان از یک مقدار واحد در شرایط استفاده کرد. مثلا:

if (value) {
  
}
else {
  
  
}

document.all

شما همچنین ممکن است ببینید document.all به عنوان یک مقدار نادرست ذکر شده است. این یک را برمی گرداند HTMLAllCollection که شامل لیستی از همه عناصر سند است. و در حالی که این به false در زمینه بولی ، این ویژگی منسوخ شده است و MDN از استفاده از آن توصیه می کند.

حقیقت و نادرستی: وقتی همه چیز در جاوا اسکریپت یکسان نباشد

مقایسه برابری سست با ==

هنگام مقایسه می توان موقعیت های غیر منتظره ای را ایجاد کرد راستگو و کذب مقادیر با استفاده از == تساوی سست:

== true false 0 '' null undefined NaN Infinity [] {}
true درست است، واقعی کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب
false کاذب درست است، واقعی درست است، واقعی درست است، واقعی کاذب کاذب کاذب کاذب درست است، واقعی کاذب
0 کاذب درست است، واقعی درست است، واقعی درست است، واقعی کاذب کاذب کاذب کاذب درست است، واقعی کاذب
'' کاذب درست است، واقعی درست است، واقعی درست است، واقعی کاذب کاذب کاذب کاذب درست است، واقعی کاذب
null کاذب کاذب کاذب کاذب درست است، واقعی درست است، واقعی کاذب کاذب کاذب کاذب
undefined کاذب کاذب کاذب کاذب درست است، واقعی درست است، واقعی کاذب کاذب کاذب کاذب
NaN کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب
Infinity کاذب کاذب کاذب کاذب کاذب کاذب کاذب درست است، واقعی کاذب کاذب
[] کاذب درست است، واقعی درست است، واقعی درست است، واقعی کاذب کاذب کاذب کاذب کاذب کاذب
{} کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب

قوانین:

  • false، رشته های صفر و خالی همه معادل هستند.
  • null و undefined معادل خود و یکدیگر هستند اما هیچ چیز دیگری نیست.
  • NaN معادل هیچ چیز نیست – از جمله دیگری NaN!به
  • Infinity حقیقت دارد – اما قابل مقایسه با آن نیست true یا false!به
  • یک آرایه خالی حقیقت دارد – در حال مقایسه با true است false و مقایسه با false است true؟!به

مثال ها:


false == 0;
0 == '';
null == undefined;
[] == false;
!![0] == true;


false == null;
NaN == NaN;
Infinity == true;
[] == true;
[0] == true;

مقایسه برابری شدید با ===

هنگام استفاده از مقایسه دقیق ، وضعیت واضح تر است زیرا انواع ارزش باید با موارد زیر مطابقت داشته باشد:

=== true false 0 '' null undefined NaN Infinity [] {}
true درست است، واقعی کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب
false کاذب درست است، واقعی کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب
0 کاذب کاذب درست است، واقعی کاذب کاذب کاذب کاذب کاذب کاذب کاذب
'' کاذب کاذب کاذب درست است، واقعی کاذب کاذب کاذب کاذب کاذب کاذب
null کاذب کاذب کاذب کاذب درست است، واقعی کاذب کاذب کاذب کاذب کاذب
undefined کاذب کاذب کاذب کاذب کاذب درست است، واقعی کاذب کاذب کاذب کاذب
NaN کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب
Infinity کاذب کاذب کاذب کاذب کاذب کاذب کاذب درست است، واقعی کاذب کاذب
[] کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب
{} کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب کاذب

تنها استثنا این است NaN، که سرسختانه با همه چیز ناهمگون است.

توصیه هایی برای کار با ارزشهای صادق یا نادرست

ارزشهای صادقانه و نادرست می تواند با تجربه ترین توسعه دهندگان را جذب کند. کسانی که تازه وارد برنامه نویسی شده اند یا از زبان های دیگر مهاجرت کرده اند هیچ شانسی ندارند! خوشبختانه سه مرحله ساده برای تشخیص سخت ترین خطاها در هنگام برخورد با متغیرهای درست و نادرست وجود دارد. بیایید هر کدام را به نوبت بررسی کنیم.

1. از مقایسه مستقیم خودداری کنید

به ندرت لازم است که دو مقدار درست و نادرست را مقایسه کنیم در صورتی که یک مقدار همیشه برابر با درست یا غلط باشد:


if (x == false) 



if (!x) 

2. استفاده کنید === برابری سخت

استفاده از a === برابری شدید (یا !== نابرابری شدید) مقایسه برای مقایسه مقادیر و اجتناب از مسائل مربوط به تبدیل:


if (x == y) 




if (x === y) 


3. در صورت لزوم به مقادیر واقعی بولی تبدیل کنید

شما می توانید هر مقدار را در JavaScript به مقدار واقعی بولی در JavaScript تبدیل کنید سازنده بولی، یا منفی دوگانه !!به این به شما این امکان را می دهد که مطلقاً مطمئن شوید که یک false فقط توسط تولید می شود false، 0، ""، null، undefined و NaN:


if (x === y) 




if (Boolean(x) === Boolean(y)) 

if (!!x === !!y) 


این Boolean سازنده برمی گردد true هنگامی که یک مقدار واقعی را تصویب کرد و باز می گردد false وقتی از ارزش غلط عبور کرد این می تواند در ترکیب با روش تکرار مفید باشد. مثلا:

const truthy_values = [
  false,
  0,
  ``,
  '',
  "",
  null,
  undefined,
  NaN,
  '0',
  'false',
  [],
  {},
  function() {}
].filter(Boolean);


console.log(truthy_values);

نتیجه

مقادیر درست و نادرست به شما امکان می دهد شرایط جاوا اسکریپت و عملگرهای سه تایی بنویسید. با این حال ، همیشه موارد حاشیه ای را در نظر بگیرید. یک آرایه خالی سرکش یا متغیر NaN می تواند منجر به ساعت ها غم و اندوه اشکال زدایی شود!

آیا در مورد چیزی که در اینجا به آن پرداخته ایم به کمک نیاز دارید؟ چرا به انجمن جاوا اسکریپت ما سر نزنید و س askالی نپرسید. ما تیمی از متخصصان دوستانه آماده کمک داریم.