类型转换的判定方式

对于“==”,我们肯定不陌生,但是背后的判定机制我们可能不是很熟悉,我现在先举一些例子,最后再总结一下大概的方法:

  

null == undefined  // true

 1 == true //
     
 NaN == NaN //false
 
 '123' == 123 //true Number('123') == 123
 
  '' == 0 // true
 
  '123' == {valueOf: function(){return '123'}} // true
 
  '123' == {valueOf: function(){return 123}} // true
 
  '123' == {toString: function(){return '123'}} // true
 
  123 == {valueOf: function(){return {}}} //false

  123 == {toString:function(){return 123},valueOf: function(){return {}}}  //true;
 
  123 == {toString:function(){return 'abc'},valueOf: function(){return 123}}  //true;

123 == {toString:function(){return '123'},valueOf: function(){return {}}} //true;

  综上来看,

  1,NaN与任何值都不相等

  2,其中一个数是boolean,则将boolean转化为数字,true为1,false为0

  3,其中一个为字符串,若另一个数为数值,则将字符串(Number(str))转化为数字;

  4,其中一个为对象,另外一个为基本类型值,

    1)调用对象的valueOf方法,若valueOf返回一个基本类型值,则比较这个基本类型的值与字符串是否相等,相等

  则返回true,不相等返回false。不会再执行toString方法进行判断。

    2)调用对象的valueOf方法,若valueOf返回一个非基本类型值(对象,函数),则在执行toString方法,与返回的基本类型值

  在进行比较。

  5,对象与对象比较,判断是不是同时指向同一个对象。

  6,null和undefined不参与转换,但是null == undefined。

posted @ 2014-11-20 09:45  royalrover  阅读(259)  评论(0编辑  收藏  举报