1. JS数据类型
js分为7种简单数据类型和1种复杂数据类型 简单数据类型:Number、Null、Undefined、Boolean、String、BigInt、Symbol 复杂数据类型:Object
2.类型转换
js的数据转换分为三种
- 原始值间的转换:转换为Boolean、Number、String
- 原始值转换为对象:转换为Object
- 对象转换为原始值:有两种转换方式toString()/valueOf() 转换为String或Number
3.显式转换
人为的进行转换,一般使用函数:
- 转换为字符串:toString()或String()
- 转换为数字:Number()、parseInt()、parseFloat()
- 转换为布尔值:Boolean()
- 转换为对象:Object()
console.log(String(true)); // "true" 布尔值转换为字符串
console.log(Number("1")) // 1 字符串转换为数值
console.log(Boolean([])) // true 对象类型转换为布尔值
console.log(Object(1) ) // new Number(1) 原始值通过Number()构造函数转换为基本包装类型
4. 隐式转换
js是弱类型语言,在进行运算时,当运算符的两边类型不统一时,编译器会在运算前对两边数据进行数据类型的转换再进行运算
强制类型转换-“真值运算”
JavaScript会通过简单的转换规则,将一些非布尔类型的值转换成布尔型的值。
在使用逻辑判断符时例如:if、while、for、!等都会隐式转换成布尔值
大多数的值都会转换成true,只有少数的是false,他们分别是:false undefined null NaN '' [] 0 -0
let arr=[];
if(!arr.length){//false undefined null NaN '' [],0 -0
console.log('------')
}
console.log(typeof NaN);//NaN 类型是number
算数表达式中的隐式转换
- 递增递减++ --,一元加减+a -a,乘* 除/ 求余%,隐式转换为Number
console.log(4 * '3');//12 只做数值类型的转换
console.log(4 * []);// 0 []转换为0
console.log(4 * [1,2]);// NaN [1,2]会转换为NaN 相当于4*NaN=NaN
+ 运算符
- 如果其中一个是对象,则进行对象到原始值的转换(通过 toString());
- 进行了对象到原始值的转换后,如果其中一个是字符串,则另一个也会转换成字符串,然后进行连接;
- 否则两个操作数都转换为数字(或者NaN),然后进行加法操作。
// 数值与布尔值相加 布尔值转换为数字
console.log(1+true);// 2
// 数字与字符串相加 数字转换为字符串
console.log(1+'1');// + 先拼接优先 11
// 字符串与布尔值相加 布尔值转换为字符串
console.log('abc'+'true');// 拼接 abctrue
console.log(true+true);// 加法 2
console.log(4 + [1,2,3]);//会被toString() 41,2,3
== 运算符
在使用==时,如果两边的类型不统一,则会先对两边进行类型的转换再做判断
- null==undefined为true,其他均为false
- 如果一个是数字,另一个是字符串,字符串转换为数字
- 如果一个是布尔值,另一个是数字或字符串,布尔值转换为数字
- 如果一个是对象,另一个是字符串或数字,对象转换成原始值
console.log(true==2);// false
console.log(null==undefined);// true
console.log(1=='1');// true
let obj={abc:'1'}
console.log(obj==1);// false