隐式数据类型转换
显式转换:程序员主动调用语法去转换数据类型,语义更加明确
隐式转换:运算符两边数据类型不一致,编译器自动帮我们转换一致在计算,这是js的语法特点
- 隐式转换
- 1.转成string类型:+号两边如果有一边是字符串,则会把另一边转换成字符串,然后进行拼接
- 2.转成number类型:以下几种运算符会将任何数据转换成number类型再运算,如果无法转换则为NaN
- 数学正号 : +num
- 当
+/-
号写在一个变量名的前面,此时表示数学的正/负数
- 当
- 自增自减(++ --)
- 算术运算符(+ - * / %)
- 比较运算符(> < >= <= == != === !==)
- 说明:全等与不全等会先比较值(此时会隐式转换再比较),然后再比较数据类型
- 数学正号 : +num
- 3.转成boolean类型:逻辑非(!)会将任何数据转为boolean类型再运算
- 4.+号有三种含义:数学正负号(转成number)、算术运算符(转成number)、字符串连接符(转成string)
<script>
/*
1. 显式转换 : 程序员主动使用语法来转换(阅读性最高)
2. 隐式转换 : 如果运算符两边数据类型不一致,编译器偷偷的帮我们转成一致再计算。
(1)其他数据类型转number :
数学正号 : +num
自增自减: ++ --
算术运算符: + - * / %
关系运算符 : > < >= <=
(2)其他数据类型转string : +
(3)其他数据类型转boolean : !
*/
console.log('100' - 1); // Number('100') - 1 = 100 - 1 = 99
//1.其他数据类型转number :
// 数学正号 : +num
// 自增自减: ++ --
// 算术运算符: + - * / %
console.log(+'10'); // Number('10')
console.log('张三' - 100); // Number('张三') - 100 = NaN - 100 = NaN
console.log(10 - '1'); // 10 - Number('1') = 10 - 1 = 9
//2. 其他数据类型转string : +
console.log('1' + 1); //'1' + String(1) = '1' + '1' = '11'
/*
容易混淆点 : 把算术运算符 + 转换规则 与 连接符 + 转换规则搞混淆
*/
console.log('1' + true); //1true 连接符 ‘1’ + String(true) = '1' + 'true' = '1true'
console.log(1 + true); //2 算术运算符 1 + Number(true) = 1 + 1 = 2
console.log(1 + undefined); //NaN 算术 1 + Number(undefined) = 1 + NaN = NaN
console.log(1 + null); //1 算术 1 + Number(null) = 1+ 0 = 1
console.log('1' + null); //1null 连接 '1' + String(null) = '1' + 'null' = '1null'
//其他数据类型转boolean : !
//取反 : true变false false变true
console.log(!1); //(1)!Boolean(1) = !true = false
console.log(!!''); //(1)!!Boolean('') (2)!!false (3)!true = false
</script>
// 经典js面试题
console.log(undefined + null); // NaN
console.log(undefined - null); // NaN
console.log(undefined - undefined); // NaN
console.log(null - null); // 0