javascript 类型的隐式转换

先看一道面试题 让 a==1&&a==2&&a==3,这个问题主要查看对js隐式转换的理解,首先a不可能是一个原始类型,那么a只有可能是个对象类型了,查阅犀牛书52页《3.8.3对象转换为原始值》章节得知,对象转换到字符串或者数字类型调用了toString()和valueOf()两个方法中的一个,具体细节如下

  1. 对象转换为字符串
如果对象具有toString()方法,则调用这个方法,如果它返回一个原始值,将这个值转换为字符串类型,例如:
javascript 类型的隐式转换

文章插图
对象转换为字符串例子1
如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么就调用valueOf()方法,如果valueOf()返回原始值,则将它转换为字符串类型,例如:
javascript 类型的隐式转换

文章插图
对象转换为字符串例子2
对象转换为数字的过程调用valueOf()方法返回一个原始值,并转换为数字类型,如果没有valueOf()方法,则调用toString()方法,过程同对象转换为字符串相似
javascript 类型的隐式转换

文章插图
对象转换为数字例子
详细的js类型转换方式看下表格:
javascript 类型的隐式转换

文章插图
 

javascript 类型的隐式转换

文章插图
 
== 相等比较
  1. 一个值是undefined,另一个值是null,则它们相等,即 undefined == null;
  2. 一个值是数字,另一个值是字符串,则先将字符串转换为数字,然后比较, '123' == 123 转换为123 == 123 // true
  3. 如果有一个是true,则先转换为1,再比较,false则转换为0再比较
  4. 如果有一个是对象,另一个是原始类型,见本章所述
=== 相等比较
  1. 先查看类型是否相等,不相等就false
  2. null === undefined // false
  3. NaN === NaN // false
  4. 0 === -0 // true
  5. 先查看类型是否相等,不相等就false,相等就查看值是否相等,原始类型比较的是值,对象类型则比较地址是否相等,不相等就false,相等就true
各位观众老爷,以上文章和图片若有看不明白的地方可以私聊或者留言

【javascript 类型的隐式转换】


    推荐阅读