JavaScript隐式转换,js偷偷摸摸背着我们都做了些什么

575 阅读2分钟

@[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

该篇文章借鉴了沈老师的技术总结,如果涉及侵权,请联系我删除