JS 里的数据类型转换

1、将其他的数据类型转换成String字符串类型

(1)toSring()

toString方法适用于number类型和boolean类型,如:
true.toString(); // "true"
 (11).toString(); // "11"

但是对于null和undefined,使用这种方法会报错,如:

undefined.toString(); // Cannot read property 'toString' of undefined
null.toString(); // Cannot read property 'toString' of null

对于object,toSring方法结果不正确,结果永远是"[object Object]"

(2)String()

该方法适用于所有数据类型(除了对象,结果同toString()

String(obj); // "[object Object]"
String(11); // "11"
String(true); // "true"
String(undefined); // "undefined"

(3)+ '' 即使用+运算符加上空字符串(同样对object无效)

这个才是程序员的日常,这种方法的原理是:‘+’ 运算符只能相加相同的数据类型,如果两边的数据类型不同,他会优先将其转换成字符串来相加。因此就有一个很常见的坑:1+'1'的结果是多少?这句话是按照字符串相加的规则来计算的,所以结果为"11"
使用此方法转换成字符串的例子如下:

true+""; // "true"
undefined+""; // "undefined"
obj+""; // "[object Object]"
11+""; // "11"

2、如何将其他的数据类型转换成Number数值类型?

(1)Number()

使用Number函数,可以将任意类型的值转化成数值。Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。

Number(324) // 324
Number('324') // 324
Number('324abc') // NaN
Number('') // 0
Number(true) // 1
Number(false) // 0
Number(undefined) // NaN
Number(null) // 0

(2)parseInt()

parseInt方法用于将字符串转为整数。

parseInt('1',10) // 1
parseInt('1.23',10) // 1

如果字符串头部有空格,空格会被自动去除。parseInt(' 81') // 81
如果parseInt的参数不是字符串,则会先转为字符串再转换。
字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分.

parseInt('12.34') // 12
parseInt('15e2') // 15
parseInt('15px') // 15

如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。

parseInt('abc') // NaN
parseInt('.3') // NaN
parseInt('') // NaN
parseInt('+') // NaN
parseInt('+1') // 1

parseInt()方法默认转换成十进制,不过需要注意的是,如果参数本身就是number类型,且是0x开头(16进制),那么parseInt方法会将其以相应的进制转换成十进制展示出来,而0o开头(八进制),0b开头(二进制),都会默认转换成十进制。
因此,为了防止意外解析成其他进制,建议添加第二个参数按照特定进制解析

parseInt('0016') //16
parseInt('0b11') //0
parseInt('0x16') // 22
parseInt('0x16',10)   // 0

(3)parseFloat()

parseFloat方法用于将一个字符串转为浮点数。parseFloat('3.14') // 3.14
如果字符串符合科学计数法,则会进行相应的转换。

parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14

如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。如:parseFloat('3.14more non-digit characters') // 3.14
parseFloat方法会自动过滤字符串前导的空格。如:parseFloat('\t\v\r12.34\n ') // 12.34
如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN。

parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN  注意,parseFloat会将空字符串转为NaN。

parseFloat的转换结果不同于Number函数的地方如下:

parseFloat(true)  // NaN
Number(true) // 1

parseFloat(null) // NaN
Number(null) // 0

parseFloat('') // NaN
Number('') // 0

parseFloat('123.45#') // 123.45
Number('123.45#') // NaN

(4)程序员爱用的非常规方法:字符串 - 0

如:'22' - 0

(5)更加非常规的方法: + 字符串,这里的+并不是取正值的意思,负数一样可行

如:+ '22'+ '-011' ; // -11

3、如何将将其他数据类型转换为Boolean布尔类型?

(1)常规方法:Boolean(),如:

Boolean("ss"); // true
Boolean({}); // true

(2)程序员喜欢用的非常规方法 ,双重取反:!! x ,如:

!!"ss" ; // true
!!NaN ; // false
!!{} ; // true

(3)五个false值,即转换成Boolean后为false的值:

0 、 NaN 、 null 、 undefined 、‘’(空字符串)

你可能感兴趣的:(JS 里的数据类型转换)