如果console.log为null,为什么==工作但不是===?

时间:2017-01-14 00:04:22

标签: javascript if-statement null undefined

一般的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"的形式返回,如果我使用==

那就有意义

1 个答案:

答案 0 :(得分:-1)

null打印的

console.log(null)本身只是一个文字表达式per MDN description of nullnull不是全局对象的属性,如上面提到的value,而是对象。实际上,您使用===执行的操作是将对象与值(或属性)进行比较。因此,value和null的类型不同,这会导致if(value === null)变为false。但是,使用==检查if(value == null)时,会在检查前执行类型转换。因此valuenull在检查之前保持相同的类型,允许您比较valuenull。但有一点需要注意的是,==在检查平等方面非常宽松,而且容易犯错误。