Die Object.is()
Funktion ist ein integrierter JavaScript-Operator, der in der ECMAScript 6 (ES6) Spezifikation eingeführt wurde. In einfacher Form prüft die Object.is()
Methode, ob zwei Werte identisch sind.
Die Implementierung dieser Funktion ist subtiler als der einfache Vergleich ===
. Die Methode hält sich sehr eng an die Definition von "Sameness" in JavaScript, die eine Kombination aus loser Typgleichheit und der Verwendung von Special-Case-Regeln für bestimmte Werte umfasst:
undefined
null
true
oder false
+0
ist nicht gleich -0
und NaN
ist gleich NaN
Hier sind ein paar Beispielszenarien, die Object.is()
verwenden:
console.log(Object.is('foo', 'foo')); // true
console.log(Object.is(window, window)); // true
console.log(Object.is('foo', 'bar')); // false
console.log(Object.is([], [])); // false
var foo = { a: 1 };
var bar = { a: 1 };
console.log(Object.is(foo, foo)); // true
console.log(Object.is(foo, bar)); // false
console.log(Object.is(null, null)); // true
// Nachfolgende besonderheiten sind falsch mit == und ===
console.log(Object.is(0, -0)); // false
console.log(Object.is(-0, -0)); // true
console.log(Object.is(NaN, 0/0)); // true
Von allen obigen Beispielen prüft Object.is()
die Identität von zwei Werten auf eine Weise, die genauer ist als die ===
Methode, wobei vor allem die Fälle 0
und -0
sowie NaN
behandelt werden.
Obwohl Object.is()
und ===
in vielen Alltagsfällen ähnlich reagieren, ist Object.is()
besonders nützlich, wenn eine strenge Gleichheit erforderlich ist. Es ist besonders nützlich, wenn Sie mit speziellen JavaScript-Werten wie NaN
und -0
arbeiten. Indem Sie diese Funktion verwenden, können Sie übermäßige Fehler oder falsche Identitäten vermeiden, die aus der schlampigen Gleichheit von JavaScript entstehen können.
Es ist wichtig zu beachten, dass ES6 Teil der modernen JavaScript-Sprachversionen ist, daher ist die Object.is()
Funktion möglicherweise nicht in älteren Browsern verfügbar, die nur ES5 unterstützen. In solchen Fällen kann ein Polyfill verwendet werden.