持续更新中,每天一章,带你学习JavaScript基础,有问题大家评论区留言。
目录
5.3.1 同种数据类型之间的运算、比较和判等
5.3.2 不同数据类型之间的运算、比较和判等
第5章 数据类型转换
5.1 强制类型转换
5.1.1 其它类型转数字
Number() 强制将一个其它类型数据转化为数字类型,转不了就是NaN。
NaN(not a number)是数字类型,但NaN不是一个数字。
- 转化字符串
- 如果字符串整体来看是一个数字,那么就转化为这个数字。
- 如果字符串整体来看不是一个数字,那么就转化为NaN。
- 如果字符串是一个特殊的空字符串或者空白字符串,那么转化为0。
- 转化boolean
- true会转化为1。
- false会转化为0。
- 转化undefined undefined会转化为NaN。
- 转化null null会转化为0。
//1)字符串转数字
var str = 'ajsdg赵丽颖';//NaNstr = '132quyeqoiu123';//NaN
str = ' -1.234';//数字-1.234
str = ' ';//0
str = '';//0
str = 'null';
console.log(Number(str));
//2)布尔值转化数字
var bool = true;//1
bool = false;//0
var result = Number(bool);
console.log(result);
//3)undefined转数字
var und;//NaN
var result = Number(und);
console.log(result);
//4)null转数字
var nul = null;//0
var result = Number(nul);
console.log(result);
5.1.2 其它类型转字符串
String() 强制将一个其它类型数据转化为字符串类型。
转化字符串没有什么特殊,给任何值,都会把这个值加引号变为字符串。
//1)数字转字符串
var num = 100;
var result = String(num);
console.log(result);
//2) 布尔值转字符串
var bool = false;
var result = String(bool);
console.log(result);
//3) undefined转字符串
var und;
var result = String(und);
console.log(result);
//4) null转化字符串
var nul = null;
var result = String(nul);
console.log(result);
5.1.3 其它类型转布尔值
Boolean() 强制将一个其它类型数据转化为布尔类型
- 转化数字的时候,除了0和NaN是false,其余都是true。
- 转化字符串的时候,除了空字符串是false,其余都是true。
- 转化undefined和null都是false。
//1)数字转布尔
//除了0和NaN是false,其余都是true
var num = NaN;
var result = Boolean(num);
console.log(result);
//2)字符串转布尔值
//非空即为真
var str = 'asdfghald打包会计师';
str = '1234124';
str = ' ';
str = '';
var result = Boolean(str);
console.log(result);
//3)undefined转布尔 就是false
var und;
var result = Boolean(und);
console.log(result);
//4)null转布尔 就是false
var nul = null;
var result = Boolean(nul);
console.log(result);
5.2 手动类型转换
其实手动类型转换,就是从字符串当中提取数字,不是数字会先转化为数字。
注意:字符串要求数字字符必须在字符串的前面(前面可以有空白字符),否则就是NaN。
parseInt() 用来提取整数。
parseFloat() 用来提取浮点数(小数)。
var str = ' 112.2.3wUYGSKJFAKads';
var result = parseInt(str);
console.log(result);
result = parseFloat(str);
console.log(result);
5.3 隐式类型转换
各种类型在适当的场合会发生隐式转换
主要是运算、比较及判等过程中
5.3.1 同种数据类型之间的运算、比较和判等
- 数字和数字
//数字和数字之间运算 比较 判等 都是该怎么算怎么算,没有任何坑;
var a = 10;
var b = 20;
//算术运算
console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b);
//比较
console.log(a > b);
console.log(a < b);
console.log(a >= b);
console.log(a <= b);
//判等
console.log(a == b);
console.log(a != b);
//下面都是了解
//数字的运算小数是不准确的,目前无法避免
console.log(0.1 + 0.2);
console.log(0/1);//0
console.log(1/0);//Infinity
console.log(-1/0);//-Infinity
console.log(0/0);//NaN
console.log(1%0);//NaN
console.log(0%0);//NaN
console.log(0%1);//0
//js当中能表示的最大值和最小值
console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
2. 字符串和字符串
var str1 = 'abc';
var str2 = 'acc';
//运算 除了+是拼接字符串,其余转数字
console.log(str1 + str2);//拼接字符串
console.log(str1 - str2);
console.log(str1 * str2);
console.log(str1 / str2);
console.log(str1 % str2);
//比较
//两个字符串比较 比较的是字符的Unicode码从左左到右依次比较每个字符,出现大小的结果就停止;
//0 48
//a 97
console.log(str1 > str2);
console.log(str1 < str2);
console.log(str1 >= str2);
console.log(str1 <=str2);
//判等
//同种数据在判等的时候,不会发生任何转化,就看两边一样不一样,一样就是相等,不一样就不相等;
console.log(str1 == str2);
console.log(str1 != str2);
3. 布尔和布尔
布尔和布尔
var bool1 = true;
var bool2 = false;
//运算,全部转数字
console.log(bool1 + bool2);
console.log(bool1 - bool2);
console.log(bool1 * bool2);
console.log(bool1 / bool2);
console.log(bool1 % bool2);
//比较,全部转数字
console.log(bool1 > bool2);
console.log(bool1 < bool2);
console.log(bool1 >= bool2);
console.log(bool1 <= bool2);
//同种数据在判等的时候,不会发生任何转化,就看两边一样不一样,一样就是相等,不一样就不相等
console.log(bool1 == bool2);
console.log(bool1 != bool2);
4. undefined和undefined
undefined和undefined
var und1;
var und2;
//运算,全部转数字
console.log(und1 + und2);
console.log(und1 - und2);
console.log(und1 * und2);
console.log(und1 / und2);
console.log(und1 % und2);
//比较,全部转数字
console.log(und1 > und2);
console.log(und1 < und2);
console.log(und1 >= und2);
console.log(und1 <= und2);
//判等 同种数据在判等的时候,不会发生任何转化,就看两边一样不一样,一样就是相等,不一样就不相等
console.log(und1 == und2);
console.log(und1 != und2);
console.log(NaN == NaN);
5. null和null
null和null
var nul1 = null;
var nul2 = null;
//运算,全部转数字
console.log(nul1 + nul2);
console.log(nul1 - nul2);
console.log(nul1 * nul2);
console.log(nul1 / nul2);//NaN 1/0 Inifinity 0/0 是NaN
console.log(nul1 % nul2);
//比较,全部转数字
console.log(nul1 > nul2);
console.log(nul1 < nul2);
console.log(nul1 >= nul2);
console.log(nul1 <= nul2);
//判等 同种数据在判等的时候,不会发生任何转化,就看两边一样不一样,一样就是相等,不一样就不相等
console.log(nul1 == nul2);
console.log(nul1 != nul2);
5.3.2 不同数据类型之间的运算、比较和判等
- 数字和其它数据类型
//1、数字和字符串
var num = 100;
var str = 'zhaoliying';
//运算
//不同数据运算的时候,只要碰到字符串,+法都是拼接字符串,其余的算法都是转数字
console.log(num + str);//拼接字符串
console.log(num - str);
console.log(num * str);
console.log(num / str);
console.log(num % str);
//比较 全部转数字
console.log(num > str);
console.log(num < str);
console.log(num >= str);
console.log(num <= str);
//判等 不同数据类型之间的判等,也是要转数字
console.log(num == str);
console.log(num != str);//2、数字和布尔值 全部转数字
var bool = true;
console.log(num + bool);
console.log(num - bool);
console.log(num * bool);
console.log(num / bool);
console.log(num % bool);
//比较 全部转数字
console.log(bool > num);
console.log(num < bool);
console.log(num >= bool);
console.log(num <= bool);
//判等 不同数据类型之间的判等,也是要转数字
console.log(num == bool);
console.log(num != bool);//3、数字和undefined 全部转数字
var und;
console.log(num + und);
console.log(num - und);
console.log(num * und);
console.log(num / und);
console.log(num % und);
//比较 全部转数字
console.log(num > und);
console.log(num < und);
console.log(num >= und);
console.log(num <= und);
//判等 不同数据类型之间的判等,也是要转数字
console.log(num == und);
console.log(num != und);//4、数字和null 全部转数字
var nul = null;
console.log(num + nul);
console.log(num - nul);
console.log(num * nul);
console.log(num / nul);
console.log(num % nul);
//比较 全部转数字
console.log(num > nul);
console.log(num < nul);
console.log(num >= nul);
console.log(num <= nul);
//判等 不同数据类型之间的判等,也是要转数字
console.log(num == nul);
console.log(num != nul);
2. 字符串和其它数据类型
//1)字符串和布尔
var str = 'yangmi';
var bool = false;
//运算
console.log(str + bool);//拼接字符串
console.log(str - bool);
console.log(str * bool);
console.log(str / bool);
console.log(str % bool);
//比较
console.log(str > bool);
console.log(str < bool);
console.log(str >= bool);
console.log(str <= bool);
//判等
console.log(str == bool);
console.log(str != bool);
// 2)字符串和undefined
var und;
//运算
console.log(str + und);//拼接字符串
console.log(str - und);
console.log(str * und);
console.log(str / und);
console.log(str % und);
//比较
console.log(str > und);
console.log(str < und);
console.log(str >= und);
console.log(str <= und);
//判等
console.log(str == und);
console.log(str != und);
//3)字符串和null
var nul = null;
//运算
console.log(str + nul);//拼接字符串 'yangminull'
console.log(str - nul);
console.log(str * nul);
console.log(str / nul);
console.log(str % nul);
//比较
console.log(str > nul);
console.log(str < nul);
console.log(str >= nul);
console.log(str <= nul);
//判等
console.log(str == nul);
console.log(str != nul);
3. 布尔值和其它数据类型
var bool = true;
// 1)布尔和undefined
var und;
//运算
console.log(bool + und);
console.log(bool - und);
console.log(bool * und);
console.log(bool / und);
console.log(bool % und);
//比较
console.log(bool > und);
console.log(bool < und);
console.log(bool >= und);
console.log(bool <= und);
//判等
console.log(bool == und);
console.log(bool != und);
// 2)布尔和null
var nul = null;
//运算
console.log(bool + nul);
console.log(bool - nul);
console.log(bool * nul);
console.log(bool / nul);
console.log(bool % nul);
//比较
console.log(bool > nul);
console.log(bool < nul);
console.log(bool >= nul);
console.log(bool <= nul);
//判等
console.log(bool == nul);
console.log(bool != nul);
4. undefined和null
var und;
var nul = null;
//运算
console.log(und + nul);
console.log(und - nul);
console.log(und * nul);
console.log(und / nul);
console.log(und % nul);
//比较
console.log(und > nul);
console.log(und < nul);
console.log(und >= nul);
console.log(und <= nul);
//判等
console.log(und == nul);//undefined和null判等的时候,不会转化,特殊情况,他俩相等
console.log(und != nul);
5.4 类型转换总结
- 判等的时候:
- 先看两边是不是同种数据类型,如果是直接看是不是一样;如果不是那么两边都转数字。
- 当遇到null的时候,会有特殊情况发生:
- 特殊情况:空串和null不相等。
- 特殊情况:false和null不相等。
- 特殊情况:0和null不相等。
- 特殊情况:undefined 和 null 相等。
- 运算和比较情况下:
- 第一步:先看是不是 +
- 如果是 + 看有没有字符串,如果有就是拼接字符串。
- 第二步:再看是不是比较
- 如果是比较,看是不是两边都是字符串。
- 如果两边全是字符串,比较的是字符串的Unicode码。
- 第三步:其余情况全部转数字
- NaN:
- 所有的东西和NaN进行算术运算都是NaN。
- 所有的东西和NaN进行比较大小都是false。
- 所有的东西和NaN都不相等(包括自己)。
- 全等和不全等:(不会出现类型转换)
- 他们在判等的时候,必须类型和值都相同。
- 如果有一个不一样,就不全等。