عناصر العمليات العلاقية ECMAScript
- الصفحة السابقة عناصر الحسابات الإضافية
- الصفحة التالية عناصر الحسابات
تقوم عمليات العلاقات بمقارنة. تعود كل عملية مقارنة قيمتها布尔ية.
طريقة مقارنة عادية
تقوم عمليات العلاقات مثل أقل من، أكبر من، أقل أو يساوي، وأكبر أو يساوي بمقارنة الأعداد، بنفس الطريقة التي تقوم بها العمليات الحسابية.
كل عمليات العلاقات تعود قيمتها布尔ية:
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 إلى خطأ، لذا فإن هذا الكود أيضًا يعود إلى خطأ:
var bResult = "a" >= 3; alert(bResult);
عادة، إذا كان قيمة العنصرين المستخدمين في عمليات الحساب الأقل من، كانت العودة يجب أن تكون خطأ، ولكن إذا كان العنصر هو NaN، فإن الحالة ليست كذلك.
- الصفحة السابقة عناصر الحسابات الإضافية
- الصفحة التالية عناصر الحسابات