如果console.log为null,为什么===工作而===不工作



一般javascript问题。

我有一个按钮,可以标记用户是否想在脸书上分享帖子。点击后,它会检查用户是否已经拥有facebook代币。以及令牌是否有效。

如果两者都不正确,它将提示用户登录到facebook。

现在代码运行得很好。但很长一段时间以来,我一直在做如果(facebookToken===null)

它忽略了它。直到我切换到==,它才起作用。

为什么会这样?我在控制台记录它,它作为空返回

这是我的工作代码:

shareToFacebookPress() {
const timeNow = Date.now();
const facebookToken = this.props.facebook_token;
console.log(facebookToken);
const facebookExpiry = this.props.facebook_token_expiry * 1000;
console.log(facebookExpiry);
if (facebookToken == null || facebookExpiry < timeNow) {
console.log("doesn't exist");
this.props.signInFacebook();
} else {
this.state.shareToFacebook ?
this.setState({ shareToFacebook: false }) :
this.setState({ shareToFacebook: true });
}
}

肯定是===直接比较,所以如果我在控制台中记录值并返回null,那么if(value === null)应该等于true吗?

这似乎是不可能的。这里发生了什么?

如果value控制台登录到null,而我登录if(value === null),为什么这不等于true

当然,如果它是控制台日志null,那么它一定是它吗?

它不会以"null"的形式返回,如果我使用==,这将是有意义的

根据null的MDN描述,console.log(null)打印的null本身只是一个文字表达式。null不是全局对象的属性,就像上面提到的value一样,而是一个对象。实际上,上面使用===所做的是将对象与值(或属性)进行比较。因此,值和null的类型不同,这导致if(value === null)变成false。然而,当使用==来检查if(value == null)时,在检查之前执行类型转换。所以valuenull在检查之前保持相同的类型,从而可以比较valuenull。不过,需要注意的一点是,==在检查平等性时非常宽容,很容易出错。

最新更新