隐式类型转换js(初级-自学)

隐式类型转换js(初级-自学)
核心底层规则ToPrimitive转原始值针对引用类型原始值类型hint分三种number、string、default具体根据你的操作转数字则先执行valueOf如果还不是数字然后执行toString转字符串则先执行toString如果还不是字符串然后执行valueOf兜底Date类型经过valueOf处理返回时间戳ToBoolean转布尔ToNumber转数字ToString转字符串1.逻辑、if/while/for条件判断、逻辑运算符||、逻辑运算符ToBoolean0、-0、NaN、’ ‘、null、undefined、转换成false其他转换成true[]、{}、Set等都转换成true注意function test(){}!test false;!test() true;逻辑运算符会转换判断真假但是不改变返回值类型2.数字运算符-、*、/ToNumber-ToPrimitiveundefined NaN;null 0;Symbol 抛出错误Cannot convert a Symbol value to a numberBigInt 报错不能隐式转换对象处理使用ToPrimitive转换核心要转换成数字所以hint为numberToPrimitive会把引用类型向数字类型靠近3.数字运算符如果是基本数据类型任意一边是字符串则ToString否则ToNumber将两边都转换成数字后相加如果任意一个是引用类型则使用ToPrimitivr进行转换hint为default走默认hiint为numer的逻辑Date除外4.类型相同直接比较null undefined true出现布尔值转换成数字出现对象ToPrimitive转原始值字符串和数字-字符串·转数字引用类型比较类型不同直接false类型相同比较引用地址[] ![] truenull 0 falseNaN NaN false{} false false5.比较运算符、、、(ToNumber)两边都是字符串按照字符典比较自己学习的记录文档如果有写错的还有补充的欢迎各位大佬评论指正