我对==和===感到困惑。我知道==表示不检查类型,===表示检查类型。但是当我使用 null 案例时,它会失败。为什么
var obj = {
name : 'null'
}
document.write(obj.name==null);
输出:false
答案 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