对于<
运算符,当它适用于两个字符串,两个数字和两个布尔值时,似乎很容易理解。
我的问题分为两部分:
当我们用它来比较两个对象时有什么规则?
我似乎无法编写{} < {}
,但以下代码会生成false
。
var a = {};
var b = {};
console.log(a < b); //false
当我们用它来比较两种不同的类型时,有什么规则?
true < "" //false
true > "" //true
10 < true //false
10 < "" //false
我不知道为什么结果是这样的。我找到了an article on comparison in JavaScript,但没有详细说明。
顺便说一句,我对==
和===
的工作方式毫无疑问。
答案 0 :(得分:1)
当我们用它来比较两个对象时有什么规则?
来自wikipedia:
当比较作为对象的变量时,它们被认为是 不同的是,如果它们的对象不是同一个对象,即使是值 他们是一样的,所以:
var obj1 = {a: 1};
var obj2 = {a: 1};
var obj3 = obj1;
alert(obj1 == obj2); //false
alert(obj3 == obj1); //true
当我们用它来比较两种不同的类型时,有什么规则?
在您发布的文章中对此进行了解释,我引用了该文章:
如果两个操作数的类型不同,则JavaScript会转换 操作数,然后应用严格的比较。如果任一操作数是a 如果是数字或布尔值,操作数将转换为数字 可能;否则,如果任一操作数是字符串,则字符串操作数为 如果可能,转换为数字。如果两个操作数都是对象,那么 JavaScript比较操作数时相同的内部引用 在内存中引用相同的对象。
答案 1 :(得分:1)
该文章中有很多详细信息:
如果两个操作数不是同一类型,JavaScript会转换操作数,然后应用严格比较。
所以,对于数字,布尔和字符串:
false == 0 == ""
true == 1 == "1" != "any other string (including empty)"
答案 2 :(得分:1)
当我们用它来比较两个对象时有什么规则?
对于<
和>
(以及<=
和>=
)比较,JavaScript引擎会在对象上调用valueOf
或toString
方法,如果可用,检查更大/更小。在这个例子中:
var a = {};
var b = {};
console.log(a < b);
JavaScript测试以下条件并返回false:
"[object Object]" < "[object Object]" // false
当我们用它来比较两种不同的类型时,有什么规则?
答案 3 :(得分:0)
在比较之前将对象转换为字符串。