一般的javascript问题请。
我有一个按钮,用于标记用户是否想要在Facebook上分享帖子。单击时,它将检查用户是否已拥有facebook令牌。此外,令牌是否有效。
如果其中任何一个不成立,则会提示用户登录Facebook。
现在代码工作得很好。但是很长一段时间我都在做if(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)
应该等于真?
这似乎是不可能的。这里发生了什么?
如果value
控制台记录到null
并且我if(value === null)
,为什么这不等于true
?
当然,如果它是控制台记录null
那么它必须是它吗?
它不会以"null"
的形式返回,如果我使用==
答案 0 :(得分:-1)
null
打印的 console.log(null)
本身只是一个文字表达式per MDN description of null。 null
不是全局对象的属性,如上面提到的value
,而是对象。实际上,您使用===
执行的操作是将对象与值(或属性)进行比较。因此,value和null的类型不同,这会导致if(value === null)
变为false
。但是,使用==
检查if(value == null)
时,会在检查前执行类型转换。因此value
和null
在检查之前保持相同的类型,允许您比较value
和null
。但有一点需要注意的是,==
在检查平等方面非常宽松,而且容易犯错误。