Tho*_*hes -3 javascript numbers equals
在发现React JS之后,我对Javascript相当新,并且遇到了一个我不明白的问题.
我有以下代码,该控制台将两个变量记录为具有相同值的数字.然而它显示为假......为什么?
非常感谢你提前.
<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>
Run Code Online (Sandbox Code Playgroud)
我在控制台日志中得到以下内容:
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
Run Code Online (Sandbox Code Playgroud)
当然第一个日志应该显示为true.
{ i }不是i,它(从ES2015开始)是一个带有属性的对象i.所以自然如果this.state.activeTab是1,this.state.activeTab === { i }是假的,因为一个数字不能是===一个对象.
你要
var match = this.state.activeTab === i;
// No {} ---------------------------^
Run Code Online (Sandbox Code Playgroud)
我不确定是什么this.state.activeTab,但它永远不会相等{ i }.
你不是在与那里的数字进行比较,而是与包含数字的新对象进行比较.
这种新的对象,{ i }将只返回true了全等比较(===),如果你与自己进行比较,这activeTab显然不是.
这可能会修复您的代码:
var match = this.state.activeTab === i;
Run Code Online (Sandbox Code Playgroud)
(假设activeTab是一个数字)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |