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