2017-10-16 18 views
-3

Je suis assez nouveau à Javascript après avoir découvert React JS, et j'ai un problème que je ne comprends pas.Javascript 1 === 1 est faux

J'ai le code suivant, qui console les deux variables sous forme de nombres avec des valeurs identiques. Pourtant, il apparaît comme faux ... Pourquoi?

Merci beaucoup d'avance.

<Nav tabs> 
    { 
     navigation.map((page, i) => { 
      ++i; 

      var match = this.state.activeTab === { i }; 

      console.log(
       typeof(i) + " " + i, 
       typeof(this.state.activeTab) + " " + this.state.activeTab, 
       match 
      ); 

      return (
       <NavItem> 
        <NavLink 
         className={ 
          classnames({ 
           active: match, 
           'cursor-pointer': true 
          }) 
         } 
         onClick={() => { this.toggleTab({ i }) }} 
        > 
         { page.name } 
        </NavLink> 
       </NavItem> 
      ) 
     }) 
    } 
</Nav> 

je reçois ce qui suit dans mon journal de la console:

app.js:89525 number 1 number 1 false 
app.js:89525 number 2 number 1 false 
app.js:89525 number 3 number 1 false 
app.js:89525 number 4 number 1 false 
app.js:89525 number 5 number 1 false 
app.js:89525 number 6 number 1 false 

Certes, le premier journal doit afficher en tant que vrai.

+0

'{i} == I' mais vous ne connectez' {i} 'Vous – Quentin

+1

ne font pas '1 === 1' mais' 1 === {1} '. Enlevez les parenthèses – Weedoze

+3

En regardant 'this.state.activeTab === {i}' je peux vous dire que '{i}' n'est pas un nombre, mais un objet avec la forme suivante: '{i: i}'. –

Répondre

6

Je ne suis pas sûr de ce que this.state.activeTab est, mais il jamais égale { i }.

Vous ne comparez pas un nombre, mais un nouvel objet contenant un nombre.

Ce nouvel objet, { i }, ne que retour true pour la stricte comparaison de l'égalité (===) si on le compare avec lui-même, qui activeTab est évidemment pas.

Cela va sans doute corriger votre code:

var match = this.state.activeTab === i; 

(En supposant activeTab est un nombre)

+0

Merci beaucoup. C'était en effet le cas. Je ne suis pas sûr pourquoi je dactylographiais en tant qu'obst ES6. Une telle erreur stupide, tant de nouvelles choses à retenir, et le code que vous avez donné a parfaitement fonctionné. Je vais marquer comme accepté dès que possible. –

6

{ i } n'est pas i, c'est (à partir de ES2015) un objet avec une propriété appelée i. Donc naturellement si this.state.activeTab est 1, this.state.activeTab === { i } est faux, car un nombre ne peut pas être === à un objet.

Vous voulez

var match = this.state.activeTab === i; 
// No {} ---------------------------^ 
+0

Merci beaucoup, c'était tout à fait raison. Beaucoup de mercis :) –