不同类型的比较规则(<和>)是什么?

时间:2013-11-26 11:01:21

标签: javascript operators

对于<运算符,当它适用于两个字符串,两个数字和两个布尔值时,似乎很容易理解。

我的问题分为两部分:

当我们用它来比较两个对象时有什么规则?

我似乎无法编写{} < {},但以下代码会生成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,但没有详细说明。

顺便说一句,我对=====的工作方式毫无疑问。

4 个答案:

答案 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会转换操作数,然后应用严格比较。

  1. 如果任一操作数是数字或布尔值,则操作数为 如果可能,转换为数字
  2. 否则,如果任一操作数是字符串,则字符串操作数为 如果可能,转换为数字
  3. 如果两个操作数都是对象,那么JavaScript 会比较内部 当操作数引用同一个对象时,引用是相等的 存储器即可。
  4. 所以,对于数字,布尔和字符串:

    false == 0 == ""
    true == 1 == "1" != "any other string (including empty)"
    

答案 2 :(得分:1)

  

当我们用它来比较两个对象时有什么规则?

对于<>(以及<=>=)比较,JavaScript引擎会在对象上调用valueOftoString方法,如果可用,检查更大/更小。在这个例子中:

var a = {};
var b = {};
console.log(a < b);

JavaScript测试以下条件并返回false:

"[object Object]" < "[object Object]" // false
  

当我们用它来比较两种不同的类型时,有什么规则?

规则相同as those used for == operator

答案 3 :(得分:0)

在比较之前将对象转换为字符串。