Javascript 如果console.log为空,为什么==正在工作,而不是===呢?

Javascript 如果console.log为空,为什么==正在工作,而不是===呢?,javascript,if-statement,null,undefined,Javascript,If Statement,Null,Undefined,请回答一般问题 我有一个按钮,可以标记用户是否想在facebook上共享帖子。单击时,它将检查用户是否已经拥有facebook令牌。还有,令牌是否有效 如果其中一个不正确,它将提示用户登录facebook 现在代码运行得很好。但是很长一段时间我都在做iffacebookToken===null 而它却忽略了它。直到我切换到==才起作用 为什么会这样?我正在记录它,它返回为空 这是我的代码: shareToFacebookPress() { const timeNow = Date.n

请回答一般问题

我有一个按钮,可以标记用户是否想在facebook上共享帖子。单击时,它将检查用户是否已经拥有facebook令牌。还有,令牌是否有效

如果其中一个不正确,它将提示用户登录facebook

现在代码运行得很好。但是很长一段时间我都在做iffacebookToken===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,那么ifvalue===null应该等于true吗

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

如果值控制台记录为null,并且我执行ifvalue==null,为什么这不等于true

当然,如果它是空的,那么它一定是空的


它不会返回为null,如果我使用控制台打印的==

null,这是有意义的。lognull本身只是一个文本表达式。null不是全局对象的属性,就像您上面提到的值一样,而是一个对象。上面使用===所做的实际上是将对象与值或属性进行比较。因此,value和null的类型是不同的,这导致ifvalue===null结果为false。但是,当使用==检查ifvalue==null时,将在检查之前执行类型转换。所以value和null在检查之前保持相同的类型,允许您比较value和null。但是需要注意的是,==在检查相等性时非常宽松,并且很容易出错。

null由console打印。lognull本身只是一个文本表达式。null不是全局对象的属性,就像您上面提到的值一样,而是一个对象。上面使用===所做的实际上是将对象与值或属性进行比较。因此,value和null的类型是不同的,这导致ifvalue===null结果为false。但是,当使用==检查ifvalue==null时,将在检查之前执行类型转换。所以value和null在检查之前保持相同的类型,允许您比较value和null。但是需要注意的是,==在检查相等性时非常宽松,很容易出错。

您确定它为空吗?IIRC,比较value==null时给出的值只有null和未定义的值。yup 100%数据库中没有该值的记录,因此它的控制台记录为nullnull==未定义//false null==未定义//truePlease do console.logtypeof facebookToken,facebookToken!!facebookToken,facebookToken==null,facebookToken==null,facebookToken==void 0,facebookToken==void 0并将结果发布到此处。@bloppit控制台似乎将未定义显示为null。请尝试console.logundefined。这是在网络浏览器上吗?试试另一个。你确定它是空的吗?IIRC,比较value==null时给出的值只有null和未定义的值。yup 100%数据库中没有该值的记录,因此它的控制台记录为nullnull==未定义//false null==未定义//truePlease do console.logtypeof facebookToken,facebookToken!!facebookToken,facebookToken==null,facebookToken==null,facebookToken==void 0,facebookToken==void 0并将结果发布到此处。@bloppit控制台似乎将未定义显示为null。请尝试console.logundefined。这是在网络浏览器上吗?请尝试另一个。一旦使用中的规则使类型相等,则计算结果与。-1相同,抱歉。你似乎误解了类型这个词。null的类型为object。从语法上讲,null是一个文本,但该文本表示一个值,属性完全可以接受该值。例如,在运行window.foo=null之后,window.foo==null将为true。我看到您编辑了答案,但出于相同的原因,它仍然是错误的。一旦使用中的规则使类型相等,则计算结果与-1相同,抱歉。你似乎误解了类型这个词。null的类型为object。从语法上讲,null是一个文本,但该文本表示一个值,属性完全可以接受该值。例如,在运行window.foo=null之后,window.foo==null将为true。我看到您编辑了答案,但出于相同的原因,它仍然是错误的。