显式类型转换
toString()
String()
Number()
parseInt(string)
parseFloat(string)
Boolean()
隐式类型转换
isNaN ()
解释:判断指定的参数是否为 NaN(非数字类型),返回结果为 Boolean 类型。也就是说:任何不能被转换为数值的参数,都会让这个函数返回 true。
- 调用
Number(参数)
函数; - 将
Number(参数)
的返回结果和NaN进行比较。
console.log(isNaN('123')); // 返回结果:false。
console.log(isNaN('abc')); // 返回结果:true。因为 Number('abc') 的返回结果是 NaN
console.log(isNaN(null)); // 返回结果:false
console.log(isNaN(undefined)); // 返回结果:true
console.log(isNaN(NaN)); // 返回结果:true
自增/自减运算符:++、—-
- 调用
Number(参数)
函数; - 将
Number(参数)
的返回结果进行 加 1 操作。
正号/负号:+a、-a
任何值做+a、-a、/a运算时,运算结果都会自动转换为 Number 类型。 内部调用的是 Number()
函数。
加号:+
- 字符串 + 数字
- 当加号的两边,只要有一个是字符串的时候,就会调用
String()
函数将数字转为字符串,然后再计算。导致最终的运算结果是字符串。
- 当加号的两边,只要有一个是字符串的时候,就会调用
- Boolean + 数字
- Boolean 型和数字型相加时, true 按 1 来算 ,false 按 0 来算。这里其实是先调
Number()
函数,将 Boolean 类型转换为 Number类型,然后再和 数字相加。
- Boolean 型和数字型相加时, true 按 1 来算 ,false 按 0 来算。这里其实是先调
- null + 数字
- 等价于:0 + 数字
- undefined + 数字
- 计算结果:NaN
运算符:-、*、/
任何非 Number 类型的值做-、*、/运算时,会调用Number()
函数再运算,运算结果是 Number 类型。
逻辑运算符:&&、||、!
非布尔值进行与或运算时,会先调用Boolean()
再运算,但运算结果是原值。
&&:前者true则返回后者的值,前者false则返回前者的值,不执行后者
||:前者true则返回前者的值,不执行后者,前者false则返回后者的值
&&优先级高于||
关系运算符:<、>、<=、>=、==
- 关系运算符,得到的运算结果都是布尔值:要么是true,要么是false。
- 对于非数值进行比较时,会将其转换为数字然后再比较。
- 如果符号两侧的值都是字符串时,不会将其转换为数字进行比较。比较两个字符串时,比较的是字符串的Unicode编码。因此:当我们在比较两个字符串型的数字时,一定一定要先转型再比较大小,比如
parseInt()
。 - 任何值和NaN做任何比较都是false,即
NaN == NaN
为false - undefined 衍生自 null,所以这两个值做相等判断时,会返回true。即
undefined == null
为true - 当非 Boolean 类型的数值和 Boolean类型的数值做==时,会先把前者进行隐式转换为 Boolean类型,然后再做比较;且不会改变前者的数据类型。
const a = 1;
console.log(a == true); // 打印结果:true
console.log(typeof a); // 打印结果:number。可见,上面一行代码里,a 做了隐式类型转换,但是 a 的数据类型并没有发生变化,仍然是 Number 类型
console.log(0 == true); // 打印结果:false
转换成字符串
利用“+”的隐式类型转换:字符串拼接
变量+""
或者 变量+"abc"
c = c + ""
等价于 c = String(c)。
调用toString()
变量.toString()
- 不影响原变量
- null 和 undefined 这两个值没有
toString()
方法 - Number 类型的变量,在调用
toString()
时,可以在方法中传递一个整数作为参数。此时它将会把数字转换为指定的进制,如果不指定则默认转换为 10 进制。
String()
String(变量)
- 对于 Number 和 Boolean 而言,本质上就是调用
toString()
方法。 - 但是对于 null 和 undefined,则不会调用
toString()
方法。它会将 null 直接转换为 “null”。将 undefined 直接转换为 “undefined”。
prompt()
prompt()就是专门用来弹出能够让用户输入的对话框。重要的是:用户不管输入什么,都当字符串处理。
即返回时是用户输入的字符串
转换成数字
Number()
- 字符串 --> 数字
- 如果字符串中是纯数字,则直接将其转换为数字。
- 如果字符串是一个空串或者是一个全是空格的字符串,则转换为 0。
- 只要字符串中包含了其他非数字的内容(小数点按数字来算),则转换为 NaN。
- 布尔 --> 数字
- true 转成 1
- false 转成 0
- null --> 数字
- 结果为:0
- undefined --> 数字
- 结果为:NaN
parseInt()
parseInt(argument)
parseInt(argument,num)
第二个参数辅助表示第一个参数的进制
parseInt()的作用是将字符串中的有效的整数内容转为数字,如果对非 String使用 parseInt()或 parseFloat(),它会先将其转换为 String 然后再操作。
- 字符串 --> 数字
- 只保留字符串最开头的数字,后面的中文自动消失。
- 如果字符串不是以数字开头,则转换为 NaN。
- 如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。
- Boolean --> 数字
- 结果为:NaN
- Null --> 数字
- 结果为:NaN
- Undefined --> 数字
- 结果为:NaN
- 数字 --> 数字
- 取整,不四舍五入
var a = 168.23;
console.log(parseInt(a));
//打印结果:168 (因为是先将 a 转为字符串"168.23",然后然后再操作)
var b = true;
console.log(parseInt(b));
//打印结果:NaN (因为是先将 b 转为字符串"true",然后然后再操作)
var c = null;
console.log(parseInt(c));
//打印结果:NaN (因为是先将 c 转为字符串"null",然后然后再操作)
var d = undefined;
console.log(parseInt(d));
//打印结果:NaN (因为是先将 d 转为字符串"undefined",然后然后再操作)
var a = '110';
var num = parseInt(a, 16); // 将a当成十六进制来看待,转换成十进制的num
console.log(num);//272
var a = '5';
var num = parseInt(a, 2); //将a当成二进制来看待,转换成十进制的num
console.log(num); // NaN。二进制中没有5这个数,转换失败。
parseFloat()
转换结果为浮点数,其余类似parseInt()
转换成布尔
Boolean()
- 数字 --> 布尔
- 除了 0 和 NaN,其余的都是 true。
- 字符串 —> 布尔
- 除了空串、全是空格的字符串、字符串’0’,其余的都是 true。
- null 和 undefined 都会转换为 false。
- 引用数据类型会转换为 true。空数组[]和空对象{},转换结果也是 true
!!
使用 !!
可以显式转换为 Boolean 类型。比如 !!3
的结果是true。