【问题标题】:Why javascript check type in null case even use ==为什么javascript在null情况下检查类型甚至使用==
【发布时间】:2016-03-29 13:37:58
【问题描述】:

我对 == 和 === 有点困惑。我知道 == 表示不检查类型, === 表示检查类型。但是当我申请 null 案例时,它会失败。为什么

var obj = {
    name : 'null'
}

document.write(obj.name==null);

输出:假

查看链接 http://plnkr.co/edit/PnxL6hJOep3AN1Tgrafn?p=preview

【问题讨论】:

  • 'null'null 不是一回事
  • 不,我不能这样做。因为它来自后端
  • 但 == 不检查类型
  • @Rahul 是的,但在 JS 中,'1'==1 返回true。那么为什么'null'==null 会返回false
  • @JeremyThille ECMAScript 5 规范说:1)对于 '1' == 1:规则是:如果 Type(x) 是 String 并且 Type(y) 是 Number,则返回比较结果 ToNumber (x) == y: "2" == 2. 2) For 'null' == null: 规则是:如果 Type(x) 是 String 或 Number 并且 Type(y) 是 Object,则返回比较 x == ToPrimitive(y):ToPrimitive 表示隐式 valueOf 调用,如果定义了 toString 而未定义 valueOf,则表示 toString。

标签: javascript jquery angularjs types compare


【解决方案1】:

这是因为在您的代码中,obj.name 是一个包含 "null" 的字符串。 == 运算符不解析包含任何非数字的字符串。例如,false != "false"

以下将起作用:

var obj = {
    name: null
};

document.write(obj.name == null); // true

【讨论】:

  • 这就是问题的重点。 == 不检查类型,例如:'1'==1 返回 true (!) 那么为什么 'null'==null 返回 false
  • == 只解析字符串中的数字。
  • 这就是 OP 正在寻找的答案 :)
  • 你能提供任何相关的文件吗?
  • developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… "当比较数字和字符串时,字符串被转换为数字值。JavaScript 尝试将字符串数字字面量转换为数字类型值。首先,导出一个数学值从字符串数字文字。接下来,这个值被四舍五入到最接近的数字类型值。"
【解决方案2】:

看起来您正在将 null 与字符串 'null' 进行比较并得到正确的 false

var obj = {
name : null
}

document.write(obj.name===null);    true

var obj = {
name : 'null'
}

document.write(obj.name==='null');  true

var obj = {
    name : null
}

document.write(obj.name=='null');  false

var obj = {
name : 'null'
}

document.write(obj.name=='null'); true

【讨论】:

    【解决方案3】:

    ECMAScript 5 规范说:

    1) For '1' == 1: Rule is: 如果 Type(x) 是 String 并且 Type(y) 是 Number,返回比较结果 ToNumber(x) == y: "2" == 2。

    2) For 'null' == null: 规则是: 如果 Type(x) 是 String 或 Number 且 Type(y) 是 Object,则返回比较结果 x == ToPrimitive(y):ToPrimitive 表示隐式 valueOf 调用,如果定义了 toString 而 valueOf 未定义,则表示 toString。

    有关强制规则的完整列表,请访问: http://webreflection.blogspot.in/2010/10/javascript-coercion-demystified.html

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 1970-01-01
      • 2014-09-18
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      相关资源
      最近更新 更多