Object.is()
الدالة Object.is() تُحدِّد إن كانت تملك القيمتان المُمررتان إليها نفس القيمة.
البنية العامة
Object.is(value1, value2);
value1
القيمة الأولى التي نريد مقارنتها.
value2
القيمة الثانية التي نريد مقارنتها.
القيمة المعادة
قيمة منطقية (Boolean) تبيّن إذا كانت القيمتان متساويتين أم لا.
الوصف
الدالة Object.is() تُحدِّد إن كانت تملك القيمتان المُمررتان إليها نفس القيمة. ويكون للقيمتين نفس القيمة إذا كانت كلتاهما:
undefinednull- كلتاهما
trueأو كلتاهماfalse - كلتاهما عبارة عن سلسلة نصية لها الطول نفسه والمحارف نفسها
- تشيران إلى الكائن نفسه
- كلتاهما أعداد و:
- كلتاهما
+0 - كلتاهما
-0 - كلتاهما
NaN - ليستا
0أوNaNويحملان نفس القيمة
- كلتاهما
ما سبق لا يكافئ استخدام معامل المساواة ==، فالمعامل == يُطبِّق إجراءات على كلا القيمتين إن لم تكونا من نوعٍ واحد قبل اختبار مساواتها (مما يعني أنَّ نتيجة التعبير "" == false هي true)، لكن الدالة Object.is() لا تحوِّل أيّة قيمة.
ولا يكافئ أيضًا المعامل ===، فالمعامل === (إضافةً إلى المعامل ==) سيعامل القيمتين -0 و +0 على أنهما متساويتين، ويعامل Number.NaN على أنه لا يساوي NaN.
أمثلة
أمثلة عن استخدام قيم مختلفة مع الدالة Object.is():
Object.is('foo', 'foo'); // true
Object.is(window, window); // true
Object.is('foo', 'bar'); // false
Object.is([], []); // false
var test = { a: 1 };
Object.is(test, test); // true
Object.is(null, null); // true
// حالات خاصة
Object.is(0, -0); // false
Object.is(-0, -0); // true
Object.is(NaN, 0/0); // true
تعويض نقص دعم المتصفحات
الشيفرة الآتية تعوّض نقص دعم المتصفحات للدالة Object.is():
if (!Object.is) {
Object.is = function(x, y) {
// SameValue algorithm
if (x === y) { // Steps 1-5, 7-10
// Steps 6.b-6.e: +0 != -0
return x !== 0 || 1 / x === 1 / y;
} else {
// Step 6.a: NaN == NaN
return x !== x && y !== y;
}
};
}
دعم المتصفحات
| الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| الدعم الأساسي | 30 | 22 | غير مدعومة | مدعومة | 9 |
على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).