تفاوت == و === رو میدونی ؟؟


سلام به دوستان عزیز!

تفاوت == و === رو میدونی ؟؟

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

شاید بگی که “من می‌دونم چطور در جاوااسکریپت مقایسه کنم”، ولی مقایسه در جاوااسکریپت پیچیده‌تر از این چیزهاست. جاوااسکریپت علاوه بر مقایسه ساده، ماجرای تبدیل نوع و تفاوت‌های بین == و === رو داره که گاهی نتایج غیرمنتظره‌ای ایجاد می‌کنه.

پس برای نوشتن کد بهتر، باید بدونی دقیقاً چطور و کجا از این عملگرها استفاده کنی تا دچار مشکلات غیرقابل پیش‌بینی نشی!

معرفی تفاوت‌ها:

جاوااسکریپت دو نوع عملگر برای مقایسه داره:

  • عملگر ==
  • عملگر ===

عملگر == (مقایسه با تبدیل نوع)

در نگاه اول شاید به نظر بیاد که این دو شبیه هم هستن، اما در واقع تفاوت‌های مهمی دارن. بیاین با هم ببینیم.

وقتی از == استفاده می‌کنیم، جاوااسکریپت تلاش می‌کنه که قبل از مقایسه، نوع داده‌ها رو به هم نزدیک کنه یا تبدیل کنه. به این تبدیل می‌گیم نوع‌تبدیل (Type Coercion).

یه مثال بزنیم:

console.log(۵ == "5"); // true
console.log(۰ == false); // true
console.log(null == undefined); // true

تو این مثال‌ها می‌بینیم که جاوااسکریپت نوع‌ها رو تبدیل می‌کنه تا مقایسه انجام بشه. برای مثال، عدد ۵ با رشته “۵” مقایسه شده، اما جاوااسکریپت رشته رو به عدد تبدیل کرده و نتیجه true می‌شه.

اما این تبدیل نوع می‌تونه باعث نتایج غیرمنتظره و گاهی سردرگمی بشه.

عملگر === (مقایسه دقیق یا سختگیرانه)

در مقابل، === به عنوان مقایسه سختگیرانه یا دقیق شناخته می‌شه. اینجا جاوااسکریپت هیچ تبدیل نوعی انجام نمی‌ده؛ یعنی نوع داده‌ها هم باید دقیقاً مشابه باشن.

یه مثال بزنیم:

console.log(۵ === "5"); // false
console.log(۰ === false); // false
console.log(null === undefined); // false

تو اینجا می‌بینیم که به خاطر تفاوت در نوع داده‌ها (مثلاً ۵ عددی و “۵” رشته‌ای)، نتیجه مقایسه false می‌شه.

کدوم رو استفاده کنیم؟

حالا سوال اینجاست: == یا ===؟

به طور کلی پیشنهاد می‌شه که از === استفاده کنیم. چون با استفاده از این عملگر، از هرگونه تبدیل غیرمنتظره و خطاهای احتمالی جلوگیری می‌کنیم. اما اگه دقیقاً بدونی که چه اتفاقی می‌افته و عمداً می‌خوای تبدیل نوع انجام بشه، اون موقع می‌تونی از == استفاده کنی.

یه هشدار مهم:

البته === هم همیشه دقیق نیست! مثلاً در مورد NaN و ، این عملگر “دروغ” می‌گه:

console.log(NaN === NaN); // false
console.log(۰ === -۰); // true

اینجا NaN با هیچ مقداری، حتی خودش، برابر نیست. برای رفع این مشکل، از Number.isNaN(..) استفاده کن. همچنین برای هم می‌تونی از Object.is(..) کمک بگیری.

Number.isNaN(NaN); // true
Object.is(NaN, NaN); // true
Object.is(۰, -۰); // false

خلاصه:

برای مقایسه‌های معمولی و مطمئن از === استفاده کن. اگه نیاز به تبدیل نوع داری، می‌تونی با دقت از = = بهره ببری.


تفاوت == و === رو میدونی ؟؟

ممنون که تا اینجا همراه بودی! اگر سوالی داری، حتماً بپرس و یادت نره کد تمیز بنویسی. 🙂

دیدگاه‌ها ۱
ارسال دیدگاه جدید