2017-04-18 4 views
0

Nous savons quelle est la différence entre == et === est - fondamentalement, === empêche le moteur Javascript de convertir un des paramètre pour faire les deux paramètres du même type. Mais maintenant, dans ES6, est venu un nouvel opérateur - Object.is qui est un peu déroutant (ou peut-être === est maintenant source de confusion ..)Javascript ES6. Différence entre === et Object.is

De site Mozila (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness), nous pouvons voir la différence:

Similitude comparaisons:

x   y ==  ===  Object.is 
+0   -0 true true false 
NaN  NaN false false true 

alors, pour moi, ressemble Object.is est encore plus stricte dans les paramètres de comparaison, le cas échéant, la question soulève - comment unstrict était === (appelée « stricte égalité ») :)

Répondre

1

De l'article que vous avez lié:

Quand utiliser Object.is par rapport égaux triples

En plus de la façon dont il traite NaN, en général, la seule fois un comportement spécial de Object.is vers zéros est Ce qui peut être intéressant, c'est la poursuite de certains schémas de méta-programmation, en particulier en ce qui concerne les descripteurs de propriétés lorsqu'il est souhaitable que votre travail reflète certaines des caractéristiques de Object.defineProperty. Si votre cas d'utilisation ne l'exige pas, il est conseillé d'éviter Object.is et d'utiliser === à la place. Même si vos exigences impliquent que les comparaisons entre deux valeurs NaN soient vraies, il est généralement plus facile de tester les contrôles NaN (en utilisant la méthode isNaN disponible dans les versions précédentes d'ECMAScript) que de déterminer comment les calculs environnants peuvent affecter le signe des zéros que vous rencontrez dans votre comparaison.

+0

Cet article était trop long à lire, je cherche juste des images . Merci :) –

+0

Je trouve personnellement les 4 types d'égalité un peu plus en JS. Surtout SameValue vs SameValueZero ... pouah. – gforce301

+0

Ouais, c'était exactement pourquoi j'ai commencé à apprendre JS "In The Hard Way" - pour apprendre d'abord ce qui est sous le capot ... –

1

Via MDN:

C'est pas le même comme étant égale selon l'opérateur ===. L'opérateur === (et l'opérateur == également) traite les valeurs numériques -0 et +0 comme égales et traite Number.NaN comme n'étant pas égal à NaN.

+0

Ah, c'est une méthode .. Hm .. Sa pensée une comparaison aussi bien .. Mais, la comparaison est une méthode aussi bien, non? Thx, mon premier jour avec Javascript .. –

+1

@ J.D .: C'est * une * comparaison: Parmi les deux arguments que vous lui donnez, pour l'égalité (par une définition de l'égalité, JavaScript en a au moins quatre). :-) –

+0

@ T.J. Crowder, donc vous dites aussi que les opérateurs ne sont pas stockés en mémoire (Contexte d'exécution), comme les fonctions, non? Ce qui m'a fait confondre était cette ligne de MDN - 'La méthode Object.is() détermine si deux valeurs ont la même valeur. '- elles écrivent ** méthode ** ... –