2017-10-16 71 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 

當然第一個日誌應顯示爲真。

+0

'{I} == i'但你永遠不能登錄'{I}' – Quentin

+1

你沒有做'1 === 1',而是'1 === {1}'。刪除括號 – Weedoze

+3

看看'this.state.activeTab === {i}'我可以告訴你'{i}'不是一個數字,而是一個具有以下形式的對象:'{i:i}'。 –

回答

6

我不知道什麼是this.state.activeTab,但它會從未等於{ i }

你並沒有與一個數字進行比較,而是使用了一個包含數字的新對象。

這種新的對象,{ i },將爲全等比較(===)如果你與自己進行比較,這activeTab顯然不是回報true

這可能會解決您的代碼:

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

(假設activeTab是一個數字)

+0

非常感謝。事實確實如此。我不知道爲什麼我打出我作爲ES6 obj。這樣一個愚蠢的錯誤,需要記住的很多新事物,以及你給出的代碼完美工作。我將盡快標記爲已接受。 –

6

{ i }不是i,它是(截至ES2015)一個屬性爲i的對象。所以自然如果this.state.activeTab1,this.state.activeTab === { i }是錯誤的,因爲一個數字不能是===到一個對象。

你想

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

非常感謝,這是完全正確的。很多很多謝謝:) –