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

非常感谢,这是完全正确的。很多很多谢谢:) –