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.activeTab1this.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是一个数字)