Javascript 1 === 1 为假
Javascript 1 === 1 is false
在发现 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>
我在控制台日志中得到以下信息:
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。
{ i }
不是 i
,它是(从 ES2015 开始)一个名为 i
的带有 属性 的对象。所以自然地,如果 this.state.activeTab
是 1
,this.state.activeTab === { i }
是假的,因为一个数字不能 ===
到一个对象。
你想要
var match = this.state.activeTab === i;
// No {} ---------------------------^
我不确定 this.state.activeTab
是什么,但它 永远不会 等于 { i }
。
您不是在与一个数字进行比较,而是在与一个包含数字的新对象进行比较。
新对象 { i }
将 仅 return true
用于严格相等比较 (===
) 如果你将它与自身进行比较,activeTab
显然不是。
这可能会修复您的代码:
var match = this.state.activeTab === i;
(假设activeTab
是一个数字)
在发现 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>
我在控制台日志中得到以下信息:
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。
{ i }
不是 i
,它是(从 ES2015 开始)一个名为 i
的带有 属性 的对象。所以自然地,如果 this.state.activeTab
是 1
,this.state.activeTab === { i }
是假的,因为一个数字不能 ===
到一个对象。
你想要
var match = this.state.activeTab === i;
// No {} ---------------------------^
我不确定 this.state.activeTab
是什么,但它 永远不会 等于 { i }
。
您不是在与一个数字进行比较,而是在与一个包含数字的新对象进行比较。
新对象 { i }
将 仅 return true
用于严格相等比较 (===
) 如果你将它与自身进行比较,activeTab
显然不是。
这可能会修复您的代码:
var match = this.state.activeTab === i;
(假设activeTab
是一个数字)