از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
جاوا اسکریپت: == در مقابل === عملگرهای OperatorComparison در عبارات منطقی برای تعیین اینکه آیا دو متغیر یا شی با برخی از معیارهای تعیین شده یا سفارشی تعریف شده برابر هستند یا خیر استفاده می شود. اگر دو متغیر یا شی برابر استنباط شوند، عملگر true و اگر اینطور نباشد false را برمیگرداند. عملگرهای مقایسه در جاوا اسکریپت عبارتند از: <…
سرفصلهای مطلب
معرفی
عملگرهای مقایسه در عبارات منطقی برای تعیین اینکه آیا دو متغیر یا شیء هستند استفاده می شود برابر توسط برخی معیارهای از قبل تعیین شده یا تعریف شده سفارشی. اگر دو متغیر یا شیء استنباط شوند برابر اپراتور برمی گردد true
، و false
اگر نیستند
عملگرهای مقایسه در جاوا اسکریپت عبارتند از:
<
– کمتر از>
– بزرگتر از<=
– کمتر یا مساوی از>=
– بزرگتر یا مساوی از==
و===
– برابر با (عملگر برابری سست و سخت)!=
و!==
– مساوی نیست (عملگر نابرابری سست و سخت)
جاوا اسکریپت جالب است زیرا دو عملگر مقایسه بصری بسیار مشابه دارد، اما در عمل برای برابری بسیار متفاوت است: ==
و ===
.
در این مقاله، تفاوتهای عملگرهای برابری سست و سخت را توضیح میدهیم و نمونههایی از کاربرد آنها را مرور میکنیم.
Loose Equality Operator در جاوا اسکریپت (==)
دو برابر در جاوا اسکریپت در حال آزمایش هستند از دست دادن برابری. این به موتور جاوا اسکریپت اجازه میدهد تا این عبارات را به یک نوع معمولی ارسال کند. به این معنی که لزوماً نیازی نیست که عبارات از یک نوع باشند.
را process تبدیل یک مقدار از یک نوع به نوع دیگر نامیده می شود نوع اجبار. نوع اجبار می تواند باشد صریح و ضمنی.
اجبار نوع صریح، همانطور که از نامش پیداست، به صراحت در کد توسط یک برنامه نویس، با استفاده از روش های داخلی که جاوا اسکریپت ارائه می کند، انجام می شود.Number()
، String()
، Boolean()
…).
مثلا:
// This would result in x being a number 42
let x = Number("42");
// Similarly,this would result in y being cast to the boolean value false
let y = Boolean(0);
اجبار از نوع ضمنی است، روی از سوی دیگر، به طور ضمنی توسط جاوا اسکریپت انجام می شود. این نوع اجبار معمولا زمانی انجام می شود که از عملگرها استفاده می کنیم روی انواع مختلف، اما می توان به طور منطقی با یکی از آنها “تطابق” کرد، به عنوان مثال:
// x is going to be cast to the string "1".
let x = 1 + "";
برای توضیح این مثال، اجازه دهید از منظر موتور جاوا اسکریپت به آن نگاه کنیم:
عبارت باید ارزیابی شود و به آن اختصاص داده شود
x
. عدد اول است1
و دارد+
اپراتور در کنار آن این به معنای جمع عدد صحیح با عدد بعدی است. با این حال، یک رشته خالی وجود دارد،""
، آنجا. این را نمی توان به عدد تبدیل کرد. با این حال، ما همچنین می توانیم رشته ها را به هم بپیوندیم+
، بنابراین بیایید آنها را به عنوان رشته ها مطابقت دهیم و الحاق را انجام دهیم. در نهایت، نتیجه برگردانده شده و به آن اختصاص داده می شودx
.
به طور خلاصه، موتور جاوا اسکریپت سعی می کند هر دو مقدار را به نوعی تبدیل کند که پشتیبانی می کند
را +
عملگر که در این مورد یک رشته است.
/* In this case, the JS engine deduces that both the operands and the result have to be cast to an integer because it's the only type that has a defined subtraction operation (-) */
let y = "5" - "2";
// Because booleans don't have a + operation, the JS engine converts both true values into 1's
let z = true + true;
در حال حاضر، دقیقاً این نوع اجبار است ==
اپراتور برای بررسی برابری استفاده می کند. اجازه دهید چند نمونه از استفاده از عملگر برابری ضعیف را در Node REPL مرور کنیم:
> 42 == "42"
true
> "42" == '42'
true
42
، "42"
و '42'
همه با یک نوع داده تطبیق داده می شوند، و همه با هم برابر هستند و برمی گردند true
در مقایسه ها
بولی ها از همین اصل پیروی می کنند:
> true == 1
true
> true + true == 2
true
> false == 0
true
> false + true == 1
true
true
است 1
و false
است 0
. ما می توانیم به طور ضمنی آنها را با اضافه کردن آنها به اعداد صحیح تبدیل کنیم.
در نهایت، در اینجا مثالی از مقایسه (غیرقابل خواندن) اما از نظر نحوی معتبر آورده شده است:
> ("42" == '42') + (42 == "42") == 2
true
"42" == '42'
به عنوان ارزیابی می شود true
، همچنین 42 == "42"
. طرف دیگر بیان نیز این است true
، بنابراین ما به پایان رسیدیم true + true
، که به طور ضمنی تبدیل به 1+1
به دلیل +
امضا کردن. این بدیهی است ==
به 2
، بنابراین عبارت کلی برمی گردد true
.
مقایسه مقادیر نادرست در جاوا اسکریپت
آ دروغین مقدار متغیری است که به ارزیابی میشود false
. در جاوا اسکریپت، هفت عدد وجود دارد دروغین ارزش های – false
، 0
، ""
، ()
، null
، undefined
، NaN
.
در مورد استفاده از عملگر دو برابر چند قانون ساده وجود دارد روی دروغین ارزش های:
false
،0
و""
معادل هستندundefined
وnull
برگشتtrue
وقتی با خودشان یا یکدیگر مقایسه می شوند وfalse
در مقایسه با هر چیز دیگریNaN
در مقایسه با هر چیزی (حتی دیگریNaN
) برمی گرددfalse
بنابراین، همه اینها خواهند بود true
:
> false == 0;
true
> false == "";
true
> 0 == "";
true
> undefined == null;
true
> undefined == undefined;
true
> null == null;
true
> () == false;
true
> () == 0;
true
در حالی که همه اینها خواهند بود false
:
> undefined == false;
false
> 0 == null;
false
> null == true
false
> NaN == false;
false
> NaN == NaN;
false
اپراتور برابری دقیق در جاوا اسکریپت (===)
سه برابر در جاوا اسکریپت مخفف است برابری شدید. این بدان معنی است که بر خلاف عملگر برابری شل که قبلاً در مورد آن صحبت کردیم، هیچ تبدیل ضمنی وجود ندارد. به این معنی که خروجی نخواهد بود true
مگر اینکه هر دو نوع و ارزش های از دو عبارت مطابقت دارند. آنها مطابقت ندارند روی دیگر تایپ کنید
حال، بیایید به چند مثال عملگر برابری دقیق نگاهی بیندازیم:
> true === true
true
> true === 1
false
> false === 0
false
این مثال تولید می کند true
در مورد اول زیرا هر دو نوع (بولی) و ارزش (true
) برابر هستند. در دو مورد دیگر باز می گردد false
، زیرا اگرچه مقادیر یکسان هستند، اما انواع مطابقت ندارند. ما یک بولی را با یک عدد صحیح مقایسه می کنیم.
> 42 === 42
true
> 42 === "42"
false
در اینجا، هر دو عدد و مقدار در مثال اول با هم برابر هستند، در نتیجه true
، در حالی که مقدار و نوع عدم تطابق در مثال دوم، منجر به false
.
نتیجه
در این مقاله تفاوت بین آن ها را توضیح دادیم عملگر برابری شل و برابری شدید اپراتور در جاوا اسکریپت.
ما هم توضیح دادیم که چی نوع اجبار بود و مفهوم اجبار از نوع صریح و ضمنی.
ممکن است متوجه شده باشید که اجبار نوع ضمنی که هنگام استفاده از عملگر برابری آزاد در جاوا اسکریپت رخ می دهد، می تواند بسیار غیرقابل پیش بینی باشد. متناقض. به همین دلیل است که اگر با جاوا اسکریپت خیلی تجربه ندارید، معمولاً بهتر است هنگام بررسی مساوی بودن یا نبودن این دو عبارت، از عملگر برابری دقیق استفاده کنید.
با استفاده از عملگر برابری دقیق، هم نوع و هم مقدار را آزمایش می کنید، و بنابراین می توانید مطمئن باشید که همیشه یک آزمون برابری واقعی را اجرا می کنید.
منتشر شده در 1403-01-17 21:29:05