对象使用相等运算符为“true”和“false”返回“false”

时间:2014-02-25 11:20:05

标签: javascript

为什么一个对象使用相等运算符返回falsetrue false,但是当没有使用运算符时返回true

var test = {
    one: "1",
    two: "2"
};

if (test) console.log("if"); // true
if (test == true) console.log("true"); // false
if (test == false) console.log("false"); // false

FIDDLE

3 个答案:

答案 0 :(得分:3)

if(test)返回true,因为如果test对象已定义/存在,则此条件将返回true。如果testundefinedNANnullfalse"",则会返回false。

其余的比较是自我解释的,因为这是

if (test == true) 

将返回false,因为test不是可以与true进行比较的bool值。而不是这个你可以尝试这种比较

if (test["one"] == "1") 
  console.log("true")

<强> Js FIddle Demo

答案 1 :(得分:1)

if (test) console.log("if");  

返回true,因为它正在检查对象是否存在/已定义。

if (test == true) console.log("true"); // false
if (test == false) console.log("false"); // false

返回false,因为test不是 Boolean ,因此无法与true或false进行比较。所以它总是 false

答案 2 :(得分:0)

使用==时,存在类型转换规则。

  • 如果其中一个操作数是布尔值,则转换布尔操作数 如果为真则为1,如果为假则为0。
  • 如果将对象与数字或字符串进行比较,则JavaScript会尝试 返回对象的默认值。运营商试图 将对象转换为原始值,String或Number值, 使用对象的valueOf和toString方法。如果这 尝试转换对象失败,会生成运行时错误。

因此truefalse转换为10

test.toString()返回字符串"[object Object]",该字符串不等于01