当操作数的类型不同时,经常需要将操作数转化为所需要的类型,这个过程即为强制类型转换。强制类型转换具有两种形式:显式强制转换和隐式强制类型转换。
一、显式强制转换
主动将数据的类型转换为某种类型。
1、强制转为字符型string
(1)String( )强制转换为字符串类型
该方法可用于任何类型的数字,字母,变量,表达式:
var num = 123;
var a = String(num);
console.log(typeof num);//string
(2)toString(进制)强制转换为字符串类型
var num=10;
var a=num.toString(2);//将10转为为二进制数字且类型转变为字符型
console.log(a);
console.log(typeof num);//number
console.log(typeof a);//string
(3)toFixed(小数点位数)强制转换为字符串类型
将数值转换为字符串,并且按照小数点四舍五入保留位数,但是有精度误差
var num=10.35;
var a=num.toFixed(1);//保留1位小数且类型转变为字符型
console.log(a);//10.3
2、强制转为数值number
首先我们需要了解以下内容:
- NaN:不是一个数,但它属于数值类型
- NaN的特点:NaN和任何值进行操作都会返回NaN, NaN与任何值都不相等,包括NaN本身。
- isNaN函数:用于检测一个变量不是数值(Number)类型。isNaN()接收一个参数,这个参数可以是任何类型。
- console.log( isNaN(NaN ) // true
console.log( isNaN(10 ) // false
console.log( isNaN(‘10’) // false
console.log( isNaN(‘blue’) // true
console.log(isNaN( true )) // false (true会被转换成1) - isNaN意思是:是不是非数值,是的话返回true,所有能被该函数转换能Number类型的值,都返回false。
- 在使用isNaN进行检测的时候,首先会验证检测的值是否为数字类型,如果不是,先基于Number()这个方法,把值转换成数字类型,然后再检测。
- 空字符串、空数组、布尔值、null会转成数值,所以isNaN函数返回false。
- 空对象、函数、undefined不能转换成数值,返回true。
了解了以上内容我们就可以学习将数据类型强转为数值类型number。
(1)强转为数值number
字符串转换为数值 | |
---|---|
纯字符 Number(“你好”) | 返回NaN |
纯数字 Number(“20”) | 返回20 |
部分数字部分字符 Number(“20a”) | 返回NaN |
Number(" ") | 返回 0 |
Number("") | 返回 0 |
Number(“99 88”) | 返回 NaN |
布尔值转换为数值 | |
---|---|
Number(false) | 返回 0 |
Number(true) | 返回 1 |
未定义的值Number(undefined) | 返回NaN |
---|---|
空值Number(null) | 返回0 |
(2)强转为整数
ParseInt | |
---|---|
纯数字ParseInt(“20.12”) | 返回 20 |
ParseInt(“FF”,16) | 返回255(将16进制字符转换为数值) |
部分数字部分字符ParseInt(“20a”) | 返回20 (可以从开始转换到字符前的数值为止,如果第一位是字符返回NaN) |
纯字符 ParseInt(“你好”) | 返回NaN |
未定义的值ParseInt(undefined) | 返回NaN |
---|---|
空值ParseInt(null) | 返回NaN |
(3)强转为小数
parseFloat() 强转小数,和ParseInt类似,只不过可以保留小数位了。
2、强制转为布尔值boolean
- “”(空字符),0 ,false,undefined,null,NaN,转换为布尔值都会返回false。
- true,字符串转换为布尔值返回为true。
二、隐式强制转换
当数据类型不相同时,做数据的运算,就会自动将两端的数据自动转换为相同类型然后运算。隐式转换遵从与String(),Number,Boolean,在以下几种情况中需要注意:
- 在 算术运算符中:加法+,字符和非字符相加,会自动将非字符转换为字符型然后相加;非字符和非字符相加,会自动转换为数值运算。 减法-,乘法*,除法/,取余%,运算中都是隐式转换为数值运算,不管有没有字符。
- 在一元运算符中:全部隐式转换为数值运算。
- 在 关系运算符中:隐式转换为数值运算;===除外,不隐式转换,判断数据的值和类型必须完全相同才可以。