JavaScript数据类型之间的转换

507 阅读4分钟

先洗脑一番,JavaScript有7种数据类型,分别是

  • Number
  • String
  • Boolean
  • Null
  • Undefined
  • Object
  • Symbol

其中NumberStringBooleanNullUndefined属于简单数据类型, Object属于复杂数据类型,现就描述一下简单数据类型之间的转换。

Number

NumberString

数字1和对象1的区别

1
var a=new Number(1);

以上是两种不同的声明方式,下面我们在浏览器里输出两个变量,看得到的分别是是什么。

明显的看出对象1是有__proto__属性可以,里面有很多可使用的函数,而数字就打出就是一个孤零零的1。

通过这个就可以看出对象1和数字1最显而易见的区别,那就是对象1拥有其他可调用的函数,并且可以扩展一些自定义的函数,来强大自己,功能能多,使用起来更方便。看到这些方法我们已经知道怎么把对象1转换为String 了,那就是直接调用自己的toString()方法。

对象1转为String很简单,它自己已经实现了这个方法,那么数字1怎么转换呢,有意思的来了。 数字1转换String的方法还是有很多的,黑科技上场了。

  • 使用()可以模仿对象调用toString()
(1).toString()
// "1"

这个方法在内部执行的属性应该是这样的,在()调用toString()的时候

var temp=new Number(1);
return temp.toString()

创建了一个临时的变量它就是对象1,其实返回的还是对象1的执行结果。

  • 使用''
1 + ''
1 + ""
'' + 1
"" + 1

直接在1的前面或者后面加上''或者""简单粗暴。使用起来更方便。

NumberBoolean

Boolean是一个比较简单的类型,只有两个值,truefalse

var a=1;
var b=Boolean(a);
//true
var a=0;
var b=Boolean(a);
//false
var a=NaN;
var b=Boolean(a)
//false

与布尔之间的转换比较简单,直接使用Boolean就可以,但是有一点要注意的是,NaN对应的布尔值是false

总结:Number中0与NaN对应的是false,其他都是true(包括负数)

String

StringNumber

JS提供了两种方法把String转为Number,分别是parseInt(),parseFloat()。前者是把字符串转换成整数,后者则是把字符串装换成浮点型,并且只有String类型调用这些方法才有效,其他类型调用则返回NaN

parseInt

parseInt('1');  //1
parseInt('1j3'); //1
parseInt('a1234'); //NaN
parseInt('');//NaN

上面的代码中,parseInt()的参数都是字符串,结果只返回字符串头部可以转为数字的部分。如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。

parseInt还可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数,是有它的第二个参数决定的。

parseInt('1000', 2) // 8
parseInt('1000', 6) // 216
parseInt('1000', 8) // 512

如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略。

parseFloat

parseFloat会将一个字符串转换为浮点数。

parseFloat('1.234') //1.234

如果字符串符合科学计数法,也会进行相应的转换。

parseFloat('1.23e-3'); //0.00123
parseFloat('1.23e+3'); //1230

如果碰到不能转成浮点的字符,则会停止,返回已经转好的字符。

parseFloat('1.234fe345'); //1.234

如果不是字符串或者第一个字符不能转换成浮点数(正负号除外),则返回NaN

parseFloat(''); //NaN
parseFloat({}); //NaN
parseFloat('-1.234'); //-1.234
parseFloat('a1.234'); //NaN

String 转Boolean

Boolean('a');//true
Boolean('');//false
Boolean("");//false
Boolean('-123');//true

字符串除了''false其他都是true

Boolean

String

String中除了''转换成布尔是false,其他值都是对应true

Number

Boolean(1);//true
Booolean(0);false
Boolean(-2);//true
Boolean(NaN);//false

Number中除了0Number转成布尔对应是false,其他都是true;

Null&Undefined

Boolean(null);//false
Boolean(Undefined);//fasle

NullUndefined 永远是false

Object

Boolean({name:1});//true
Boolean({});//true
Boolean([]);//true

Object永远是true

阮一峰JavaScript 教程