JavaScript之显示转换与隐式转换

687 阅读3分钟

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

+ 运算符

  1. 如果其中一个是对象,则进行对象到原始值的转换(通过 toString());
  2. 进行了对象到原始值的转换后,如果其中一个是字符串,则另一个也会转换成字符串,然后进行连接;
  3. 否则两个操作数都转换为数字(或者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

== 运算符

在使用==时,如果两边的类型不统一,则会先对两边进行类型的转换再做判断

  1. null==undefined为true,其他均为false
  2. 如果一个是数字,另一个是字符串,字符串转换为数字
  3. 如果一个是布尔值,另一个是数字或字符串,布尔值转换为数字
  4. 如果一个是对象,另一个是字符串或数字,对象转换成原始值
console.log(true==2);// false
console.log(null==undefined);// true
console.log(1=='1');// true
let obj={abc:'1'}
console.log(obj==1);// false