2017-10-16 8 views
-3

私はReact JSを発見した後、Javascriptをかなり新しくしていますが、わからない問題があります。Javascript 1 === 1は偽です

私は以下のコードを持っています。どちらのコンソールにも、両方の変数が同じ値の数値として記録されています。しかし、それは偽と表示されます...なぜですか?

ありがとうございます。

<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> 

私は私のコンソールログに次を得る:

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 

確かに最初のログがtrueとして表示されるはずです。

+0

'{I}をしかし、あなたは' {I} ' – Quentin

+1

あなたのログを記録しません:!

これはおそらく、あなたのコードを修正します'1 === 1'ではなく' 1 === {1} 'である。 – Weedoze

+3

'this.state.activeTab === {i}'を見ると、 '{i}'は数字ではなく、 '{i:i}'という形式のオブジェクトであることが分かります。 –

答えて

6

をしたいが{ i }に等しいです。

数値と比較するのではなく、数値を含む新しいオブジェクトがあります。

新しいオブジェクト

{ i }、明らかにactiveTabではありません、あなたが自分自身でそれを比較する場合、厳密な等価比較(===)のための意志のみリターンtrue、。 i` ==(activeTabと仮定すると数である)

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

+0

ありがとうございます。これは確かに事実でした。なぜ私がES6 objとして私がタイピングしているのか分かりません。そのような愚かな間違い、覚えておくべき多くの新しいこと、そしてあなたが与えたコードは完璧に働いた。私は受け入れられたasapとしてマークします。 –

6

{ i }は、それが(ES2015のような)iと呼ばれるプロパティを持つオブジェクトです、iではありません。したがって、this.state.activeTab1の場合は、オブジェクトに===の数字を割り当てることができないため、this.state.activeTab === { i }はfalseです。

あなたは、私がthis.state.activeTabが何であるかわからないんだけど、それは決して意志

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

ありがとう、これは完全に正しいです。多くの多くのありがとう:) –

関連する問題