مقایسه دو چیز برای برابری اغلب می تواند توسعه دهنده ناخواسته جاوا اسکریپت را با مشکل مواجه کند ، زیرا این زبان دارای چندین ویژگی است که باید از آنها آگاه باشیم.
در این مقاله ، ما به این دلیل خواهیم پرداخت که چگونه عملگرهای دو و سه برابر را بررسی کنیم ، و همچنین مفهوم ارزشهای صادق و نادرست در جاوا اسکریپت را بررسی کنیم. وقتی خواندن را به پایان رساندید ، خواهید فهمید که چگونه جاوا اسکریپت مقایسه های خود را انجام می دهد و همچنین چگونه ارزش های درست و غلط می تواند به شما در نوشتن کد تمیزتر کمک کند.
تایپ در جاوا اسکریپت
متغیرهای جاوا اسکریپت به صورت پویا/نادرست تایپ می شوند و زبان برای اظهارنظر یا تغییر مقدار اهمیتی ندارد:
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الی نپرسید. ما تیمی از متخصصان دوستانه آماده کمک داریم.