@[toc]
一、隐式转换规则:
隐式转换中主要涉及到三种转换:
1.ToPrimitive()— 将值转换为原始值(截止到目前,原始值一共有7个, Null,Undefined,String,Number,Boolean,Symbol,BigInt)
Tip:
① 转换结果一定是一个原始值
② 若是不传参,对象为Date
类型的,默认为String
,其余的则为Number,ToPrimitive(input, PreferredType)
③ Number
转换流程:如果输入值已经是个原始值,直接返回它 否则,调用该对象的valueof()
方法,结果如果是原始值,则返回 否则,调用该对象的toString()
方法,结果如果是原始值,则返回 否则,抛出TypeError
异常
④ String
转换流程:将调用valueof()、toString()
方法的顺序调换一下
⑤ valueof()
函数转换结果:
Number、Boolean、String
这三种构造函数生成的基础值的对象形式,通过valueOf
转换后会变成相应的原始值
Date
会将日期转换为时间戳(数值)
此外的都返回对象本身
⑥ toString()将都转换为字符串
2.ToNumber() — 将值转换为数字
3.ToString() — 将值转换为字符串
二、隐式转换使用:
涉及隐式转换最多的两个运算符 + 和 ==,数学运算符(- * / %)这种的偶尔也会涉及到隐式转换,只是转换规则比较简单,操作数只能是转化为number类型。
运算符 x + y 涉及到的隐式转换规则:
① +属于二元运算符,如果x、y中有不属于原始值的,将其转换为原始值,保证x、y两边均为原始值
② 如果x、y中的任意一个为字符串,则表示它将做字符串的拼接操作,需要将另一方转换为字符串
③ 否则,就是做相加操作,则需要保证两边都是数字类型
推导:1+{}、{}+1
1+{} //"1[object Object]"
{}+1 //1
运算符 x == y 涉及到的隐式转换规则:
主要分为两类:x,y类型相同时以及x,y类型不相同时
x,y类型相同时,不涉及类型转换,主要注意:
① NaN不与任何人相等,包括它自己,即NaN !== NaN
② 当X和Y引用同一对象时返回true,否则返回false
x,y类型不同时,分为下面几种情况:
① x,y 为null、undefined两者中一个 // 返回true
② x、y为Number和String类型时,则转换为Number类型比较。
③ 有Boolean类型时,Boolean转化为Number类型比较。
④ 一个Object类型,一个String或Number类型,将Object类型进行原始转换后,按上面流程进行原始值比较。
推导:’0’ == true
If(‘0’){
console.log(‘I m true’)
}else{
console.log(‘I m false’)
}
//输出:I m true
该篇文章借鉴了沈老师的技术总结,如果涉及侵权,请联系我删除