منابع آموزشی و پژوهشی، برای دانشگاه و مدرسه
پشتیبانیانتشار محتوا
CODEX/سطح ۱؛ عملگرها و شرطjavascriptStrict equality

برابری سخت‌گیرانه در جاوااسکریپت

عملگر === در جاوااسکریپت برابری را بدون تبدیل نوع بررسی می‌کند؛ تفاوت آن با == و مقایسهٔ شیءها را با مثال شناسهٔ محصول یاد بگیرید.

مفهوم به زبان ساده

وقتی می‌پرسید آیا دو شناسه برابرند، نوع داده هم بخشی از پاسخ است. عملگر === اگر نوع دو طرف متفاوت باشد false می‌دهد و آن‌ها را برای برابرکردن، خودکار به یک نوع تبدیل نمی‌کند. پس عدد 7 و متن '7' با === برابر نیستند. در مقابل، == ممکن است پیش از مقایسه تبدیل نوع انجام دهد؛ برای شروع، === انتخابی روشن‌تر برای قراردادی است که نوع داده در آن مشخص است.

این رفتار به معنی مقایسهٔ عمیق محتویات نیست. دو #object جدا، حتی با ویژگی‌های هم‌نام و هم‌مقدار، با === برابر نمی‌شوند. برابر بودن مرجع یعنی هر دو طرف به همان شیء اشاره کنند. همین موضوع دربارهٔ #array هم صدق می‌کند؛ برای مقایسهٔ محتوای آرایه باید معیار جداگانه‌ای داشته باشید.

در مثال، شناسهٔ مدل عددی است ولی مقدار دریافتی از فرم متن است. ابتدا نوع هر مرز را مشخص می‌کنیم، نه اینکه همهٔ مقایسه‌ها را به == تغییر دهیم. Number در این نمونهٔ کنترل‌شده متن رقم‌دار را تبدیل می‌کند؛ در ورودی واقعی، خالی نبودن و معتبر بودن آن هم باید بررسی شود. برای نابرابریِ متناظر با این قرارداد، !== را به کار ببرید. دو نکتهٔ عددی را نیز به خاطر بسپارید: NaN حتی با خودش === نیست و صفر مثبت و منفی با این عملگر برابرند.

کجا به کار می‌آید؟

  • مقایسهٔ شناسه‌ها پس از تعیین قرارداد نوع داده
  • بررسی وضعیت‌هایی مانند status === 'ready' بدون تبدیل خاموش

از تعریف تا یک مثال واقعی

javascript
const productId = 7;
const formId = '7';
console.log(productId === formId);
console.log(productId === Number(formId));
const first = { id: 7 };
const same = first;
console.log(first === same);
console.log(first === { id: 7 });
console.log(NaN === NaN);
خروجی مورد انتظار
false
true
true
false
false
کد را تغییر دهید و نتیجه را ببینید.

این مثال چطور کار می‌کند؟

  1. عدد ۷ و رشتهٔ '7' نوع متفاوت دارند و در مقایسهٔ نخست برابر نیستند.

  2. پس از تبدیل کنترل‌شدهٔ formId به عدد، دو عدد ۷ برابرند.

  3. same به همان شیء first اشاره دارد و مقایسهٔ آن‌ها true است.

  4. شیء تازه با id مشابه، مرجع دیگری دارد؛ NaN نیز با خودش برابر نیست.

اشتباه رایج

تغییر === به == برای پنهان‌کردن ناهماهنگی نوع، قرارداد داده را مبهم می‌کند. نوع ورودی را در مرز دریافت مشخص و معتبر کنید. برای تشخیص NaN از Number.isNaN استفاده کنید.

این را به خاطر بسپارید

=== تبدیل نوع نمی‌کند و برای شیءها هویت مرجع را می‌سنجد؛ برابری محتوا قرارداد جدا می‌خواهد.

بازگشت به نقشهٔ مفاهیم
یکجا انتخاب کن، راحت‌تر دریافت کن

انتخاب‌های من ۰ منبع

مجموعهٔ مطالعه‌ات را بساز.

کنار مقاله‌ها «انتخاب» را بزنید تا چند فایل را با هم دریافت کنید.

انتخاب مقاله‌های رایگان