Javascript 对象使用相等运算符为'true'和'false'返回'false'
为什么对象在使用相等运算符的情况下返回Javascript 对象使用相等运算符为'true'和'false'返回'false',javascript,Javascript,为什么对象在使用相等运算符的情况下返回true和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 if(test)返回true,因为如果定义
true
和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
if(test)
返回true,因为如果定义/存在test
对象,此条件将返回true。如果test
是undefined
或NAN
或null
或false
或“
它将返回false
其余的比较都是不言自明的
if (test == true)
将返回false,因为test
不是可与true
进行比较的布尔值。你可以试试这个比较
if (test["one"] == "1")
console.log("true")
if(test)
返回true,因为如果定义/存在test
对象,此条件将返回true。如果test
是undefined
或NAN
或null
或false
或“
它将返回false
其余的比较都是不言自明的
if (test == true)
将返回false,因为test
不是可与true
进行比较的布尔值。你可以试试这个比较
if (test["one"] == "1")
console.log("true")
返回true,因为它正在检查对象是否存在/定义
if (test == true) console.log("true"); // false
if (test == false) console.log("false"); // false
返回false,因为测试不是布尔值,所以无法与true或false进行比较。所以它总是假
返回true,因为它正在检查对象是否存在/定义
if (test == true) console.log("true"); // false
if (test == false) console.log("false"); // false
返回false,因为测试不是布尔值,所以无法与true或false进行比较。因此,当使用
=
时,它总是false,有类型转换规则
- 如果其中一个操作数是布尔操作数,则转换布尔操作数 如果为真,则为1,如果为假,则为0
- 如果将对象与数字或字符串进行比较,JavaScript将尝试 返回对象的默认值。运营商试图 将对象转换为基本值、字符串或数字值, 使用对象的valueOf和toString方法。如果这 转换对象的尝试失败,将生成运行时错误
true
和false
被转换为1
和0
test.toString()
返回字符串“[对象对象]”
,该字符串不等于0
或1
,使用==
时,存在类型转换规则
- 如果其中一个操作数是布尔操作数,则转换布尔操作数 如果为真,则为1,如果为假,则为0
- 如果将对象与数字或字符串进行比较,JavaScript将尝试 返回对象的默认值。运营商试图 将对象转换为基本值、字符串或数字值, 使用对象的valueOf和toString方法。如果这 转换对象的尝试失败,将生成运行时错误
true
和false
被转换为1
和0
test.toString()
返回字符串“[object object]”
,该字符串不等于0
或1
console.log({}==“[object object]”)true
现在有意义了:)console.log({}==“[object]”);//真的
现在说得通了:)