JavaScript类型转换
-
隐式转换介绍:
- 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换
- 例如1 > "0"这行代码在js中并不会报错,编译器在运算符时会先把右边的"0"转成数字0`然后在比较大小
-
隐式转换规则:
- 转成string类型: +(字符串连接符)
- 转成number类型:++/–(自增自减运算符) + - * / %(算术运算符) > < >= <= == != === !=== (关系运算符)
- 转成boolean类型:!(逻辑非运算符)
原始值 | 转换为数字 | 转换为字符串 | 转换为布尔值 |
---|---|---|---|
false | 0 | “false” | false |
true | 1 | “true” | true |
0 | 0 | “0” | false |
1 | 1 | “1” | true |
“0” | 0 | “0” | true |
“000” | 0 | “000” | true |
“1” | 1 | “1” | true |
NaN | NaN | “NaN” | false |
Infinity | Infinity | “Infinity” | true |
-Infinity | -Infinity | “-Infinity” | true |
“” | 0 | “” | false |
“20” | 20 | “20” | true |
“Runoob” | NaN | “Runoob” | true |
[ ] | 0 | “” | true |
[20] | 20 | “20” | true |
[10,20] | NaN | “10,20” | true |
[“Runoob”] | NaN | “Runoob” | true |
[“Runoob”,“Google”] | NaN | “Runoob,Google” | true |
function(){} | NaN | “function(){}” | true |
{ } | NaN | “[object Object]” | true |
null | 0 | “null” | false |
undefined | NaN | “undefined” | false |
数据类型 | 转换为true的值 | 转换为false的值 | |
---|---|---|---|
Boolean | true | false | |
String | 任何非空字符串 | “”(空字符串) | |
Number | 任何非0数字 | 0和NaN | |
Object | 任何对象 | null | |
Undefined | 不适用 | undefined | |
<script>
//类型一: 字符串连接符算术运算符 之间隐式转化
//转String类型 两边必须有一个字符串
console.log(1 + "true");//1true
//console.log(String(1) + "true");
console.log(1 + true);//2
//console.log(1 + Number(true));
//undefiend转换为数字类型时为NAN
console.log(1 + undefined);//NAN
console.log(1 + null);//1
//类型二 关系运算符 : 会把其他的数据类型转化为Number 再比较
console.log("2" > 10); //false
console.log("2" > "10");//true
//"2".charCodeAt() == 50 > "10".charCodeAt() == 49
console.log("abc" > "b");//false
//先拿 a 和 b 比较
console.log("abc" > "aab");//true
//类型三 复杂的类型在隐式转换的时候 先转成String 然后再转Number进行计算
console.log([1, 2] == "1,2")//true
// console.log([1, 2].toString())
var a = {}
//{}转换为String类型为"[object Object]"
console.log(a == "[object Object]")//true
//类型四 当有逻辑非! 在关系运算符里面 怎么进行隐式转换
//[]空数组先转换为string --> Number
// "" ---> 0
console.log([] == 0);//true
//只要有 ! 必须把右边转化为布尔值
//[]转化为布尔值为false
console.log(![] == 0);//true
console.log({} == {});//false
// {}转换为String类型为[object Object]
console.log({} == !{}); //false
</script>