一、强制类型转换
1.定义
- 将一个数据类型强制转换成另一个数据类型。主要是指将其他的数据类型转换成String、Number、Boolean。
2.将其他数据类型转换为String
(1)方法一:调用toString()方法
- 调用需要转换数据类型变量的toString()方法,该方法并不会影响到原来的变量的数据类型。
- 需要重新去定义一个新变量,把被转换换数据类型变量的toString()方法的值赋值给新变量,那么新变量的数据类型就是String类型了。或者再次重新赋值给a,刷新a的数据类型。
但是当变量的数据类型为Null或者Undefined这两个值时,这个变量在调用toString方法时会报错。
所以方法一只适用于String、Number、Boolean的类型转换。
语法:调用xxx的yyy()方法:xxx.yyy();
var a=123;//当前a的数据类型是number
var b=a.toString();//调用a的tostring方法去转换类型,定义新变量b,把a转换之后的类型赋值给b
console.log(typeof a);//结果a还是number类型
console.log(typeof b);//结果b是string类型
var a=123;//当前a的数据类型是number
a=a.toString();//调用a的tostring方法去转换类型然后直接赋值给a,刷新a的数据类型
console.log(typeof a);//结果a就是string类型
- 当我们直接在页面中打印一个对象时,实际上是输出的对象的toString()方法的返回值。
- toString()方法在对象的原型的原型中。
- 如果希望在输出对象时,希望不输出[object object],可以为对象添加一个toString()方法,确定其返回值。
per.toString=function(){
return "我是小per";
}
这样只是修改了一个实例中的toString方法,想要所有的实例都修改,就想原型对象中修改。
Person.prototype.toString=function(){
return "Person[name="+this.name];
}
(2)方法二:调用String()函数
- 调用String()函数,并将被转换的数据作为参数传递给函数。
- 该函数同样不会影响当前变量的函数类型
- 调用xxx()函数:语法:xxx();转谁谁就写括号里。
var a=123;//当前a的数据类型是number
console.log(typeof a);//结果a还是number类型
a=String(a);//调用String函数转换数据类型赋值给a,刷新了a的数据类型
console.log(typeof a);//结果a变成String类型
使用String()函数转换数据类型时
对于Number和Boolean来说和使用toString()方法没区别
对于Null和Undefined来说,不会调用toString()方法
它会将null直接转换成"null"
将undefined直接转换成"undefined"
(3)方法三:任意值类型+空串
任何值做加法运算时,首先将非字符串的类型转换成字符串类型,将任意值类型加上空串"",就可以将任意值的类型转换为字符串String类型。这是一种隐式的类型转换,由浏览器自动完成,实际上也是调用了String()函数。
var a=123;//number类型
a=a+"";//和空串相加
console.log(a);
console.log(typeof a);//输出类型为String类型
3.将其他数据类型转换为Number
(1)方法一:调用Number()函数
- 调用Number()函数,并将被转换的数据作为参数传递给函数。
- 使用Number()函数进行类型转换时:
1. 字符串====>>数字:
(1).如果是纯数字的字符串,那么就直接转换成数字
(2).如果字符串里面有非数字,则转换为NaN
(3).如果字符串是空的或者都是空格,则转换结果为0
var a="123";//当前a的数据类型是string
a=Number(a);//调用Number函数转换数据类型赋值给a,刷新了a的数据类型
console.log(typeof a);//结果a变成Number类型
console.log(a);//结果为123,开始赋值不同,这里结果就会不同NaN/0
- 布尔值====>>数字:
(1).如果布尔值为true,那么转换结果是1
(2).如果布尔值为false,那么转换结果是0
var a=true;//当前a的数据类型是Boolean
a=Number(a);//调用Number函数转换数据类型赋值给a,刷新了a的数据类型
console.log(typeof a);//结果a变成Number类型
console.log(a);//a的结果是1
- Null====>>数字:结果就是0
- Undefined====>>数字:结果是NaN
(2)方法二:用于字符串
- 这种方式专门用来对付字符串
- parseInt()函数:把字符串转换成一个整数
- paserFloat()函数:把字符串转换成一个浮点数
var a="123px";//a是字符串
a=parseInt(a);//parseInt()函数
console.log(typeof a);//类型是number
console.log(a);//结果是123
var a="123.345px";//a是字符串
a=paserFloat(a);//paserFloat()函数
console.log(typeof a);//类型是number
console.log(a);//结果是123.345
parseInt()函数可以将字符串中有效的整数内容取出来,然后转换为Number
paserFloat函数用法和parseInt类似,它可以将字符串有效的小数内容取出来。
- 对于非String类型使用 parseInt()函数、paserFloat()函数,它会先将其转换成String类型然后再进行操作。
(3)任何值做-0;*1;/1运算
任何值做减、乘、除运算时,都会将值先转换成Number类型。运算后的返回值类型也是Number类型,我们可以运用这一特点进行类型转换,将数值进行-0;*1;/1得到的结果不变,值的类型转换为Number类型了。原理和Number()函数一样,使用起来更加简单一点。
var a="123";
var b=a-0;//var b=a*1;var b=a/1;减法,乘法,除法操作
console.log(b);//结果是123
console.log(typeof b);//数据类型是number
(4)方法四:数据类型使用“+正号”
可以对其他数据类型使用“+正号”使其变成Number类型。原理和Number()函数一样
var a="123";//字符串类型
var b=+a;//用“+”
console.log(b);//123
console.log(typeof b);//number
4.将其他数据类型转换为Boolean
(1)方法一:调用Boolean()函数
- 数字====>>Boolean:除了0和NaN,其余都是true。
- 字符串====>>布尔值:除了空串,其余都是true
- Null和Undefined转换成布尔值都是false。
- 对象也会转换成true。
(2)方法二:对非布尔值进行非运算
- 如果对一个值进行两次取反操作,则该值不变。
- 如果对非布尔值进行非运算,则会将其转换为布尔值,然后再取反,所以我们可以利用该特点,可以将一个其他的数据类型转换为布尔值类型,可以为一个任意数据类型取两次反,来将其转换为布尔值
var a="1";//a是字符串
a=!!a;//两次取反
console.log(a);//true
console.log(typeof a);//boolean