async در JS

کدام عملگر برابر (== در مقابل ===) باید در مقایسه جاوا اسکریپت استفاده شود؟

آنچه که در این مقاله خواهید خواند:

سوال

من از JSLint برای مرور جاوا اسکریپت استفاده می‌ کنم، و پیشنهادات زیادی را برای جایگزینی ==(دو علامت مساوی) با ===(سه علامت مساوی) در هنگام انجام کار هایی مانند مقایسه idSele_UNVEHtype.value.length == 0 درون یک عبارت if برمی ‌گرداند.

آیا جایگزین کردن == با === مزیت عملکردی دارد؟

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

اگر هیچ تبدیل نوع صورت نگیرد، آیا == افزایش عملکرد دارد؟

پاسخ

عملگر برابری دقیق ( === ) مانند عملگر برابری انتزاعی ( == ) رفتار می کند به جز اینکه هیچ تبدیل نوع انجام نمی شود و انواع باید یکسان باشند تا برابر در نظر گرفته شوند.

اپراتور == پس از انجام هر نوع تبدیل ضروری، برای برابری مقایسه خواهد کرد . اپراتور === تبدیل را انجام نمی دهد، بنابراین اگر دو مقدار یک نوع === نباشند، به سادگی false برمی گرداند. هر دو به یک اندازه سریع هستند.

جاوا اسکریپت دو مجموعه از عملگر های برابری دارد: === و !==، و دو قلو های بدشان == و !=. موارد خوب آنطور که شما انتظار دارید کار می کنند. اگر دو عملوند از یک نوع باشند و مقدار یکسانی داشته باشند، ===تولید true و !== تولید false می کند. دو قلو های شیطانی وقتی عملوند ها از یک نوع هستند کار درست را انجام می دهند، اما اگر از انواع مختلف باشند، سعی می کنند مقادیر را وادار کنند. قوانینی که آنها این کار را انجام می دهند پیچیده و فراموش نشدنی است. اینها چند مورد جالب است:

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true
عملگرها در JS

فقدان گذرا نگران کننده است. توصیه من این است که هرگز از دو قلو های شیطانی استفاده نکنید. در عوض، همیشه از === و !== استفاده کنید. تمام مقایسه هایی که نشان داده شده است false با اپراتور === تولید می شود.

به روز رسانی

یک نکته خوب توسط @Casebash در نظرات و در پاسخ @Phillipe Laybaert در مورد اشیا مطرح شد. برای اشیا، == و === به طور هماهنگ با یکدیگر عمل کنید (به جز در موارد خاص).

var a = [1,2,3];
var b = [1,2,3];

var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };

var e = "text";
var f = "te" + "xt";

a == b            // false
a === b           // false

c == d            // false
c === d           // false

e == f            // true
e === f           // true

مورد خاص زمانی است که شما یک بدوی را با یک شی که با توجه به روش toString یا روش valueOf به همان ابتدایی ارزیابی می شود، مقایسه می کنید. به عنوان مثال، مقایسه یک رشته ابتدایی با یک شی رشته ایجاد شده با استفاده از String سازنده را در نظر بگیرید.

"abc" == new String("abc")    // true
"abc" === new String("abc")   // false

در اینجا اپراتور ==  مقادیر دو شی را بررسی می کند و true برمی گرداند، اما === می بیند که آنها یک نوع نیستند و برمی گردند false. کدامیک صحیح می باشد؟ این واقعاً به آنچه می خواهید مقایسه کنید بستگی دارد. توصیه من این است که سوال را به طور کامل دور بزنید و فقط از String سازنده برای ایجاد اشیاء رشته از حروف الفبای رشته استفاده نکنید.

شما می توانید برای یادگیری جاوا اسکریپت از مسیر کارآموزی فرانت اند استفاده کنید.

پاسخ‌ها

آدرس ایمیل شما منتشر نخواهد شد.

پل ورود به بازار تکنولوژی

مشاوره رایگان انتخاب مسیر

با کمک مشاورهای رستاوا آکادمی مسیر کارآموزی مناسب برای خودت رو برای ورود به بازار کار تکنولوژی انتخاب کن

توسعه فردی برای حرفه‌ای شدن

منتورهای رستاوا و دوره‌های ما شما رو برای کارآموزی و در نهایت جذب و استخدام آماده میکنن

مدرک بین المللی و استانداردهای جهانی

یادگیری با استاندار های بین المللی و دریافت مدرک از Credx Academy کانادا

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

۲ هفته رایگان

همین حالا با منتورها

ارتباط آنی بگیر!