ای سی ایم اے تعلقات آپریٹر

关系运算符执行的是比较运算。每个关系运算符都返回一个布尔值。

常规比较方式

关系运算符小于、大于、小于等于和大于等于执行的是两个数的比较运算,比较方式与算术比较运算相同。

每个关系运算符都返回一个布尔值:

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 ہونا، تو اس صورت میں نہیں ہوتا.