Object.is()
الدالة Object.is()
تُحدِّد إن كانت تملك القيمتان المُمررتان إليها نفس القيمة.
البنية العامة
Object.is(value1, value2);
value1
القيمة الأولى التي نريد مقارنتها.
value2
القيمة الثانية التي نريد مقارنتها.
القيمة المعادة
قيمة منطقية (Boolean
) تبيّن إذا كانت القيمتان متساويتين أم لا.
الوصف
الدالة Object.is()
تُحدِّد إن كانت تملك القيمتان المُمررتان إليها نفس القيمة. ويكون للقيمتين نفس القيمة إذا كانت كلتاهما:
undefined
null
- كلتاهما
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).