js中是如何进行隐式转换的

108 阅读2分钟

那么隐式转换话,最重要的也是围绕着ToPrimitive方法,To就是去的意思,在这里我们可以把它理解为转化的意思,Primitive是原始的意思,那么原始数据类型也就是基本数据类型,这个方法就是转换基本数据类型的意思,这是js中每个值隐含的自带的方法,用来将值(无论是基本类型值还是对象)转换为基本类型值,如果值为基本类型,则直接返回值本身,如果值为对象,你就还需要做进一步的操作

//obj 是需要转换的参数
//type 是期望的结果类型
 ToPrimitive(obj,type)

type的值可以为number或者string,默认情况下是number

当type为number

  • 调用obj的valueOf方法,如果为原始值,则返回,否则下一步
  • 调用obj的toString方法,如果为原始值,则返回,否则下一步
  • 抛出TypeError异常
var objToNumber=function(value){
  return Number(value.valueOf().toString())
}
console.log(objToNumber([]));//0
console.log(objToNumber({}));//[object,object]=>NAN

当type为type

  • 调用obj的toString方法,如果为原始值,则返回,否则下一步
  • 调用obj的valueOf方法,如果为原始值,则返回,否则下一步
  • 抛出TypeError异常

说明

  • +操作符的两边有至少一个string类型变量时,两边的变量都会被隐式转换为字符串,其他情况两边的变量都会被转换为数字。
console.log(1+'23')//123
console.log(1+false)//1
console.log('1'+false)//1false
console.log(true+false)//1
  • 操作运算符会转换为数字
console.log(25 - '23')//2
console.log(1*false)//0
console.log(1 / 'aa')//NAN
  • =操作符
console.log(3 ==true)//3->3,true->1,fale
console.log('0' == false)//'0'->0,false-->0,true
console.log('0'==0)//true
  • 是> ,<比较符,按照字母的排列顺序比较
console.log('c' > 'b')//false
console.log('de' > 'fg')//false
  • 其他情况下,转换成数字再进行比较
console.log('12' < 13)//true
console.log(false < -1)//false
  • 对象
var a={}
console.log(a >2)//fasle
//可以分解为
console.log(a.valueOf())
console.log(a.toString())
console.log(Number(a.toString()))