Object. is()
Vérifie si deux valeurs sont identiques. Elle ne diffère de === que pour NaN, ainsi que pour 0 et -0.
- Renvoie
truesi les valeurs sont identiques, sinonfalse.- Modifie l’original
- Non
Exemple
#console.log(Object.is('Léa', 'Léa'))
console.log(Object.is(NaN, NaN))
console.log(NaN === NaN)
console.log(Object.is(0, -0))
console.log(0 === -0)Définition et utilisation
#La méthode Object.is(a, b) renvoie true quand les deux valeurs sont la même valeur. Elle fonctionne presque comme === : elle ne convertit pas les types, et compare les objets par référence, donc deux objets distincts avec un contenu identique ne sont pas égaux entre eux.
Il n’y a que deux différences. Object.is(NaN, NaN) renvoie true, alors que NaN === NaN donne false. À l’inverse, Object.is(0, -0) renvoie false, alors que 0 === -0 donne true. Le zéro négatif apparaît par exemple avec -1 * 0 ou Math.round(-0.4). La méthode includes() ainsi que les collections Map et Set utilisent une comparaison intermédiaire : chez elles, NaN est égal à NaN, et 0 et -0 sont égaux aussi.
Au quotidien, === suffit. Object.is() est utile dans du code qui doit détecter chaque changement de valeur, par exemple dans des bibliothèques qui comparent un état. React utilise justement cet algorithme pour vérifier si une nouvelle valeur d’état diffère de la précédente.
Syntaxe
#Object.is(value1, value2)Paramètres
#value1
valeur quelconque
La première valeur comparée.value2
valeur quelconque
La seconde valeur comparée.
Plus d’exemples
#const settings = { theme: 'dark' }
const sameSettings = settings
const copy = { ...settings }
console.log(Object.is(settings, sameSettings))
console.log(Object.is(settings, copy))const values = [Math.round(-0.4), -1 * 0, 0 / -5]
console.log(values)
console.log(values.map((value) => Object.is(value, -0)))
console.log(values.map((value) => value === 0))function hasChanged(previous, next) {
return !Object.is(previous, next)
}
const state = { points: 10 }
const mutated = state
mutated.points = 20
console.log(hasChanged(state, mutated))
console.log(hasChanged(state, { ...state, points: 30 }))
console.log(hasChanged(NaN, NaN))Un changement de champ sur le même objet n’est pas détecté, car la référence n’a pas changé. C’est pourquoi l’état dans React est mis à jour avec une nouvelle copie de l’objet, plutôt qu’en modifiant les champs de l’ancien.
Compatibilité des navigateurs
#Largement disponible
Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.
- Chrome
- Edge
- Firefox
- Safari
Bonnes pratiques
#- Pour vérifier
NaN,Number.isNaN(value)est plus clair à lire. RéservezObject.is()aux cas où vous avez besoin d’une comparaison générale de valeurs quelconques. Object.is()ne compare pas le contenu des objets. Pour cela, il vous faut votre propre fonction qui compare les champs, ou une fonction prête à l’emploi provenant d’une bibliothèque.
Entrées associées
#- ===L’opérateur d’égalité stricte compare des valeurs sans conversion de types : true n’est obtenu que pour le même type et la même valeur.
- Number.isNaN()Vérifie si une valeur est exactement NaN.
- Array.prototype.includes()Vérifie si un tableau contient la valeur donnée.
- SetUne collection de valeurs uniques : chaque valeur ne peut apparaître qu’une fois dans l’ensemble.
- Spread (...)La syntaxe spread décompose un tableau, une chaîne ou un objet en éléments individuels : pour copier, fusionner et passer des arguments.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.