js隐式转换

隐式转换定义

在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算。这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换。例如1 > "0"这行代码在js中并不会报错,编译器在运算符时会先把右边的"0"转成数字0然后在比较大小。

隐式转换规则

类型 符号使用
转成string类型 +(字符串连接符)
转成number类型 ++ --(自增自减运算符) + - * / %(算术运算符) > < >= <= == != === !=== (关系运算符)
转成boolean类型 !(逻辑非运算符)

隐式转换需要注意的

"+"两边只要有一边是字符串,则为字符串连接符,只有两边都是数字时候,才是算数运算符,下同

1
2
3
4
console.log(1+"true");//"1true"
console.log(1+true);//2
console.log(1+undefined)// NaN;
console.log(1+null);//1

关系运算符有一边是字符串的时候,会先转成Number,然后再比较

1
console.log("2">10);//false

同时为字符串时,都转成Number,之后比较,注意按照字符的Unicode码来转换数字。

我们可以使用**”.charCodeAt()”**来查看Unicode编码数字大小。

1
2
3
4
5
6
//2.charCodeAt()=50      10.charCodeAt()=49
console.log("2">"10");//true
console.log("abc">"b");//false
console.log("abc">"aad");//true
console.log(NaN=NaN);//false
console.log(undefined=null);//true

复杂数据类型在隐式转换时会先转成String,然后再转成Number运算