مق

مقایسه در JavaScript

12 تمرین

درباره‌ی مقایسه

مقایسه‌ی اعداد

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

مقایسه عملگر
بزرگ‌تر از a > b
بزرگ‌تر یا مساوی a >= b
کوچک‌تر از a < b
کوچک‌تر یا مساوی a <= b
برابر (دقیق) a === b
نابرابر (دقیق) a !== b

نتیجه‌ی مقایسه همیشه یک مقدار منطقی است، یعنی یا true یا false.

1 < 3;
// => true

2 !== 2;
// => false

1 === 1.0;
// => true
// All numbers are floating-points, so this is different syntax
// for the exact same value.

مقایسه‌ی رشته‌ها

در JavaScript می‌توان از عملگرهای مقایسه‌ی بالا برای مقایسه‌ی رشته‌ها هم استفاده کرد. در این حالت، ترتیب فرهنگ‌نامه‌ای (واژه‌نگاری) اعمال می‌شود. فهرست ترتیب دقیق همه‌ی کاراکترها را می‌توانید اینجا ببینید.

'Apple' > 'Pear';
// => false

'a' < 'above';
// => true

'a' === 'A';
// => false

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

10 < 2;
// => false

'10' < '2';
// => true (because "1" comes before "2")

روش دیگری برای مقایسه‌ی رشته‌ها، متد localeCompare است. با آن می‌توانید گزینه‌های گوناگونی را تنظیم کنید تا شیوه‌ی مقایسه‌ی رشته‌ها را تغییر دهید.

برابری دقیق

شاید برایتان سؤال باشد که چرا در JavaScript برای بررسی برابری از سه علامت مساوی استفاده می‌شود. === بررسی «برابری دقیق» را نشان می‌دهد، یعنی هیچ تبدیل نوعی انجام نمی‌شود و مقادیر از نوع‌های متفاوت همیشه نابرابرند.

'3' === 3;
// => false
// The value on the left has type string, the value on the right
// has type number.

1 === 1n;
// => false
// The value on the left has type number, the value on the right
// has type bigint.

استفاده از === و !== روش توصیه‌شده برای بررسی برابری در JavaScript است.

پرهیز از تبدیل نوع ضمنی

== و != هم وجود دارند که بررسی «برابری سست» را نشان می‌دهند. بهتر است از آن‌ها پرهیز کنید، چون پیش از انجام مقایسه تبدیل نوع ضمنی را اعمال می‌کنند. نتیجه در این موارد به‌سختی قابل پیش‌بینی است و گاهی همان چیزی نیست که انتظار دارید. می‌توانید اینجا بیشتر درباره‌ی آن بخوانید.

0 == false;
// => true

در تئوری می‌توانید مقادیری از نوع‌های متفاوت را هم مقایسه کنید (مثلاً "1" < 2). در این حالت مقادیر به‌صورت ضمنی تبدیل می‌شوند تا مشخص شود نتیجه «درست» است یا «غلط». درست مانند بررسی برابری سست، این کار هم به همان دلیلی که پیش‌تر گفته شد توصیه نمی‌شود.

در عوض چه باید بکنید؟ می‌توانید از تبدیل نوع صریح استفاده کنید. با این کار می‌توانید پیش از انجام مقایسه مطمئن شوید که مقادیر نوع درستی دارند. آن‌وقت درک کدتان آسان‌تر می‌شود و احتمال خطا در آن کمتر است.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

مقایسه را یاد بگیرید