برنتی / می‌نویسم که فکر کنم

دنیای جاوااسکریپت ۳ - انواع روش‌های مقایسه برابری

1399.05.31·دنیای جاوااسکریپت

انواع روش‌های مقایسه در جاوااسکریپت

  • Strict Equality
    • a === b
    • با سه علامت مساوی یا ===
  • Loose Equality
    • a == b
    • با دو علامت مساوی یا ==
  • Same Value Equality
    • Object.is(a, b)

۱. روش مقایسه Same Value Equality

به دلیل تشابه رفتار روش Same Value Equality با مدل ذهنی ما در پست‌های قبلی انواع مقدارها یا Values و متغیرها یا Variables از این روش شروع کردیم.

پس از مشاهده کدهای زیر مدل ذهنی آن را تصور کرده و سپس نتیجه را حدس بزنید. ( با در نظر گرفتن این مورد که خروجی متد فقط در صورتی برابر true است که دو متغیر ورودی آن دقیقا به یک مقدار در دنیای جاوااسکریپت اشاره می‌کنند.)

let dwarves = 7;
let continents = '7';
let worldWonders = 3 + 4;
console.log(Object.is(dwarves, continents)); // false
console.log(Object.is(continents, worldWonders)); // false
console.log(Object.is(worldWonders, dwarves)); // true

حال اجازه دهید مثالی با استفاده از مقادیر دسته‌ی Objects and Functions را بررسی کنیم.

let banana = {};
let cherry = banana;
let chocolate = cherry;
cherry = {};

به نحوه‌ی شکل گیری گام به گام مدل ذهنی توجه کنید.

نتیجه نهایی

نتایج مورد نظر با توجه به مدل ذهنی بالا

console.log(Object.is(banana, cherry)); // false
console.log(Object.is(cherry, chocolate)); // false
console.log(Object.is(chocolate, banana)); // true

۲. روش مقایسه‌ی Strict Equality

این روش مشابه روش قبل عمل مقایسه را انجام می‌دهد بجز دو مورد نادر زیر که استثنا هستند.

  • NaN === NaN
    • که خروجی false را برمی گرداند درصورتی که هر دو یک شیئ از دسته‌ی Primitive هستند و مقدار مورد نظر true است.
  • -0 === 0 یا 0 === -0
    • که خروجی true را بر می‌گرداند در صورتی که دو مقدار 0 و -0 دو مقدار متفاوت هستند.

۳. روش مقایسه‌ی Loose Equality

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

console.log([[]] == ''); // true
console.log(true == [1]); // true
console.log(false == [0]); // true

این روش بصورت گسترده به عنوان یک تصمیم بد در طراحی اولیه شناخته شده‌است و بسیاری از استانداردها برنامه نویسی جاوااسکریپت استفاده از == و =! را منع کرده‌اند.
استفاده از این روش در پروژه‌های جدید کاملا غیر معمول است و به همین خاطر بیشتر راجع به آن حرف نمی‌زنیم. اگر شما علاقه دارید بدانید این روش چگونه کار می‌کند به == Loose equality using مراجعه کنید.

 

§ فهرست « دنیای جاوااسکریپت »
  1. 1405.07.18هزار آیکون در یک میلی‌ثانیه: کش کردن رسم SVG به‌جای memoکامپوننت آیکونی که SVG را از داده می‌سازد در هر رندر کمی کار اضافه می‌کند. اندازه گرفتم memo کجا کمک می‌کند و کجا نه، و با نگه داشتن عناصر رسم هر آیکون، رندر مجدد هزار آیکون را از ۳.۶ به حدود ۱ میلی‌ثانیه رساندم.
  2. 1405.07.04ساختن هوکی شبیه useSyncExternalStore از صفربا useState و useEffect قدم‌به‌قدم هوکی می‌سازم که به یک store بیرونی subscribe شود، باگ هر نسخه را نشان می‌دهم و آخر کار توضیح می‌دهم چرا نسخه‌ی خودِ ری‌اکت کاری می‌کند که از کد کاربر برنمی‌آید.
  3. 1405.06.29مشکل Tearing در ری‌اکت چیست؟تیرینگ زمانی رخ می‌دهد که یک مقدار بیرون از چرخه‌ی رندر ری‌اکت حین رندر تغییر کند و کامپوننت‌های مختلف در یک فریم، دو مقدار متفاوت از همان داده را نشان بدهند.
  4. 1405.06.29چطور در دیجیکالا با useSyncExternalStore جلوی رندرهای اضافه را گرفتیموقتی داده‌ی ویجت‌های یک لیست با تأخیر و به‌صورت پلکانی می‌رسد، نگه‌داشتن آن در یک state یا Context مشترک باعث می‌شود کل لیست با هر آپدیت دوباره رندر شود؛ useSyncExternalStore به‌همراه React.memo راه می‌دهد فقط همان ویجتی که داده‌اش عوض شده رندر شود.
  5. 1399.06.03دنیای جاوااسکریپت - مقدمهآموزش ساده و روان اصول جاوااسکریپت با مدل ذهنی Dan Abramov
  6. 1399.06.01دنیای جاوااسکریپت ۵ - Prototypesمفهوم ساده‌ی Prototypes یا نمونه اولیه در جاوااسکریپت
  7. 1399.05.31دنیای جاوااسکریپت ۴ - mutate یا تغییر دادن object"مثال‌هایی از تغییر در object
  8. 1399.05.31دنیای جاوااسکریپت ۳ - انواع روش‌های مقایسه برابریانواع روش‌های مقایسه در جاوااسکریپت Object.is
  9. 1399.05.31دنیای جاوااسکریپت ۲ - متغیرها در جاوااسکریپتمتغیرها یا Variables در جاوااسکریپت و تفاوت آنها با مقادیر یا Values
  10. 1399.05.24دنیای جاوااسکریپت ۱ - انواع مقدارها یا Valuesجاوااسکریپت شامل ۹ نوع از مقادیر هست که ۷ مورد آن از نوع Primitive و یا اولیه و اصلی و ۲ مورد دیگر که از نوع Object و Function می‌باشند.