首页 > 代码库 > 这些比较规则,你未必都知道

这些比较规则,你未必都知道

  相等运算符:

  使用相等运算符来比较两个值是否相等,相等返回true,否则返回false。

  1、对于简单类型来说,如数字、布尔值、字符串,比较的是两者的值是否相等。

  1==1  // true

  2==1  // false

  true==true  // true

  true==false  // false

  "ajax"=="ajax"  // true

  "ajax"=="AJAX"  // false

  "ajax"=="javascript"  // false

 

  2、对于引用类型来说,如对象、数组等,比较的是两者的引用是否相等。也就是说,如果有两个数组,它们所包含的的元素是一样的,但是比较的结果仍然为false。

  var a = new Array(1,2,3);

  var b = a;

  var c = new Array(3,1,2);

  var d = new Array(1,2,3);

  a==b  // true

  a==c  // false

  a==d  // false

  

  更详细的比较规则是:当两个值的类型相同时,就比较它们的值或者引用是否完全相等,当两个值类型不同时,他们也有可能相等。

  * null与undefined相等。

  * 数字和字符串比较,先将字符串转换为数字,再比较值。

  * 布尔值和其它类型的值比较时,先将布尔值转换为数字再比较。true转换为1,false转换为0。

  * 当数字、布尔值或字符串与对象比较时,先将对象转换为简单类型再比较。javascript的内置对象一般会先尝试valueOf()转换,再尝试toString()转换。比较特殊是是Date类,它会先执行toString()转换。

  var a;

  null==a  // true

  1=="1"  // true。将字符串1转换为数值1,再比较

  1==true  // true。将布尔值true转换为1,再比较

  0==false  // true。将布尔值false转换为0,再比较

  "1,2,3"==[1,2,3]  // true。

  

  补充:

  * javascript中只要是对象都存在toString方法,该方法作用是:将调用该方法的值转换为字符串返回。

  *valueOf()方法用于返回对象的原始值,该方法是数组对象的默认方法。

  

这些比较规则,你未必都知道