عملگرهای مقایسه‌ای ECMAScript

عملگرهای رابطه‌ای عملیات مقایسه انجام می‌دهند. هر عملگر رابطه‌ای یک مقادیر Boolean برمی‌گرداند.

روش مقایسه معمولی

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

هر عملگر رابطه‌ای یک مقادیر Boolean برمی‌گرداند:

var bResult1 = 2 > 1	//true
var bResult2 = 2 < 1	//false

اما، عملکرد رشته‌ها در اعمال عملگرهای رابطه‌ای متفاوت است. بسیاری از افراد فکر می‌کنند که کمتر به معنای "در حروف‌چینی جلوتر" و بیشتر به معنای "در حروف‌چینی عقب‌تر" است، اما اینطور نیست. برای رشته‌ها، هر کاراکتر در رشته اول با کد کاراکتر در رشته دوم در موقعیت مشابه مقایسه می‌شود. پس از انجام این عملیات مقایسه، یک مقادیر Boolean برمی‌گردانند. مشکل اینجاست که کد کاراکترهای بزرگتر از کد کاراکترهای کوچکتر هستند، بنابراین ممکن است موارد زیر را داشته باشید:

var bResult = "Blue" < "alpha";
alert(bResult);	// خروجی true

در مثال بالا، رشته "Blue" از "alpha" کوچکتر است زیرا کد کاراکتر B 66 است و کد کاراکتر a 97 است. برای دستیابی به نتایج مقایسه حقیقی حروف‌چینی، باید دو عدد را به فرم یکسان‌سازی شده (کاملاً بزرگ یا کاملاً کوچک) تبدیل کرده و سپس مقایسه کنید:

var bResult = "Blue".toLowerCase() < "alpha".toLowerCase();
alert(bResult);	// خروجی false

تبدیل هر دو عملگر به حروف کوچک، اطمینان حاصل می‌کند که "alpha" در ترتیب حروف پیش از "Blue" قرار دارد.

مقایسه عدد و رشته

شرایط دیگری نیز در مقایسه دو عدد به صورت رشته رخ می‌دهد، مانند:

var bResult = "25" < "3";
alert(bResult);	// خروجی "true"

این کد رشته "25" و "3" را مقایسه می‌کند. هر دو عملگر رشته هستند، بنابراین مقایسه بر اساس کد حروف انجام می‌شود (کد حرف "2" 50 است و کد حرف "3" 51 است).

اما اگر یکی از عملگرها را به عدد تبدیل کنیم، نتیجه جالب‌تری می‌گیریم:

var bResult = "25" < 3;
alert(bResult);	// خروجی "false"

در اینجا، رشته "25" به عدد 25 تبدیل می‌شود و سپس با عدد 3 مقایسه می‌شود، نتیجه قابل پیش‌بینی است.

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

اما اگر یک رشته نتواند به عدد تبدیل شود، چه؟ به عنوان مثال زیر را در نظر بگیرید:

var bResult = "a" < 3;
alert(bResult);

آیا می‌توانید خروجی این کد را پیش‌بینی کنید؟ حرف "a" نمی‌تواند به یک عدد معنادار تبدیل شود. اما اگر از روش parseInt() برای آن استفاده کنید، NaN برمی‌گردد. بر اساس قوانین، هر رابطه‌ای که شامل NaN باشد، باید به false برمی‌گردد، بنابراین این کد نیز به false برمی‌گردد:

var bResult = "a" >= 3;
alert(bResult);

معمولاً، اگر دو مقدار کمتر از عملگرهای کمتر از عملگر برمی‌گردد به false، پس باید بزرگتر از یا برابر با عملگر نیز به true برمی‌گردد، اما اگر مقدار NaN باشد، اینطور نیست.