为什么javascript检查类型为null的情况甚至使用==

时间:2015-12-23 06:56:49

标签: javascript jquery angularjs types compare

我对==和===感到困惑。我知道==表示不检查类型,===表示检查类型。但是当我使用 null 案例时,它会失败。为什么

var obj = {
    name : 'null'
}

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

输出:false

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

3 个答案:

答案 0 :(得分:3)

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

以下内容可行:

var obj = {
    name: null
};

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

答案 1 :(得分:1)

ECMAScript 5规范说:

1)对于'1'== 1:规则是:如果Type(x)是String而Type(y)是Number,则返回比较结果ToNumber(x)== y:“2”== 2.

2)对于'null'== null:规则是:如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y):ToPrimitive意味着隐式valueOf调用或toString如果定义了toString,则valueOf不定义。

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

答案 2 :(得分:0)

看起来你正在将null与字符串' null'进行比较。并获得正确的错误

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