JavaScript数据类型转换总结


JavaScript中有7种数据类型:
6 种原始类型(简单类型):

  1. 数值:Number:整数和小数
  2. 字符串:String:字符组成的文本
  3. 布尔:Boolean:true和false
  4. 两个特定值Null:表示无值,即此处的值就是“无”的状态
  5. Undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值著作权归作者所有。
  6. 符号:Symbol (ECMAScript 6 新定义)

1种引用类型(复杂类型):

  1. Object
    Object本质上是由一组无序的键值对组成的.

1. typeof 操作符

使用 typeof 操作符可以检测基本数据类型,对一个值使用 typeof 操作符可能会返回下列某个字符串:

  • ‘undefined’ —— 这个值未定义
  • ‘boolean’ —— 这个值是布尔值
  • ‘Stinrg’ —— 这个是是字符串
  • ‘number’ —— 这个值是数值
  • ‘Object’ —— 这个值是对象
  • ‘function’ —— 这个值是函数

一些使用 typeof 操作符的例子:

        var a;
        var obj = {
            name:"why",
            age:18
        }
        console.log(typeof 'abcdef');
        console.log(typeof obj);
        console.log(typeof 12);
        console.log(typeof a);
        

打印的结果:
在这里插入图片描述

2.转数值

有3个函数可以把非数值转化为数值: Number, parseInt() , parseFloat(),第一个函数可以用于任何数据类型,二另外两个函数则专门用于把字符串转化为数.这三个函数对于同样的输入会有不同的返回结果.

2.1 Number()函数的转化规则:

  • Boolean ,false 转化为 0 , true 转化为 1;
  • 如果是数值,则只进行简单的传入和传出;
  • null 转化为 0 ;
  • undefined 返回 NaN
  • 如果是字符串,则遵循以下规则:
  1. 如果字符串中值包含数字(包括前面带正号或负号的情况),则转化为十进制.
  2. 如果字符串中包含有效的浮点数,则会将其转化为对应的浮点数值
  3. 如果字符串中包含有效的进制格式,例如 “0xf” ,则将其转换为相同大小的十进制数值。
  4. 如果是空字符串,则转化为0
  5. 如果字符串中包含上述格式以外的字符,则转为 NaN
  • 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值,如果转化的结果是 NaN ,则调用对象的 toString() 方法然后再依照前面的结果返回响应的值.

使用Number 的例子:

        console.log(Number('hello world'));
        console.log(Number(''));
        console.log(Number('0000110'));
        console.log(Number(true));

在这里插入图片描述

2.2 parseInt()

在处理整数转换时更为常用。在转换是查看是否符合数值模式。

遵循的转化规则如下:

  • 如果在转换字符串的话,会忽略前面的空格,直到找到第一个非空格字符。
  • 如果第一个字符不是数字字符或负号后不是数字字符,就会返回NaN
  • 如果是空字符串,就会返回NaN
  • 如果第一个字符是数字字符,parseInt()会继续解析下去,直到解析完或遇到了一个非数字字符。
  • 因为小数点不是有效的数字字符,类似"22.5" 会被转换为22
    -parseInt能解析不同进制的数字字符。
  • 因为javascript引擎不同,ECMAScript3ECMAScript在解析八进制字符串时存在分歧,建议都加上进制参数。
        console.log(parseInt('123asc'));  //123
        console.log(parseInt(''));        //NaN
        console.log(parseInt('0xA'));     //10(十进制数)
        console.log(parseInt(22.5));      //22
        console.log(parseInt('070'));     //56(八进制)
        console.log(parseInt('70'));      //70(十进制数)
        console.log(parseInt('0xf'));     //15

ECMAScript 3 JavaScript中,'070’被当成八进制字面量,因此转化后的十进制为56,而在ECMAScript 5 JavaScript中,parseInt()已经不具备解析八进制的能力,因此前面的0被认为是无效的,从而将这个值当成70,结果就得到十进制的70.

为了消除在使用parseInt()函数时可能导致的困惑,可以为这个函数提供第二个参数,转化时使用基数(即多少进制),如果知道要解析的值是十六进制格式的字符串,那么指定基数16作为第二个参数,可以保证得到正确的结果,例:

        console.log(parseInt('0xAF',16));     //175

实际上,如果指定了16作为第二个参数,字符串可以不带前面的0x,如下所示:

        console.log(parseInt('AF',16));     //175
        console.log(parseInt('AF'));     //NaN

在上面的例子中,第一个转化成功了,第二个却失败了.差别在于第一个转换传入了技术,第二个没有传入技术,明确告诉了parseInt() 要解析一个十六进制格式的字符串,二第二个转换发现第一个字符不是数字字符,因此就自动终止了.

指定基数会影响数值的输出结果:

        console.log(parseInt('10',2));     //2
        console.log(parseInt('10',8));     //8
        console.log(parseInt('10',10));     //10
        console.log(parseInt('10',16));     //16

2.3 parseFloat()

  • 字符串从头解析到尾,或忽略前面的空格,直到遇到第一个无效的浮点数字字符为止.
  • 第一个小数点有效,之后的小数点就无效,后面跟着的字符串将会被忽略。
  • 可以识别不同进制的浮点数值格式,但都是转换为十进制值,无第二个参数指定转换进制。
  • 十六进制的字符串始终会被转化为0。
  • 如果解析的是整数,没有小数点或是小数点后都是零,会返回整数。
        console.log(parseFloat('123asc'));  //123
        console.log(parseFloat(''));        //NaN
        console.log(parseFloat('0xA'));     //0
        console.log(parseFloat(22.5));      //22.5
        console.log(parseFloat('22.5.344'));     //22.5
        console.log(parseFloat('098.034'));      //90.034
        console.log(parseFloat('2.12e10'));     //21200000000

3.转字符串

要把一个值转为字符串有两种方法.第一种是使用几乎每个值都有的toString() 方法,这个方法唯一要做的就是返回相应值的字符串的表现.还有一个是 String() 方法.

3.1 toString()

看下面的例子:

        var age = 18;
        var strAge = age.toString();
        var show = true;
        var strShow = show.toString();
        console.log(strAge,strShow);   //字符串18和字符串true

数值,布尔值,对象和字符串(每个字符串也有一个toString 方法,返回该字符串的副本)都有toString()方法.但是 nullundefined 没有这个方法.

多数情况下,调用toString() 方法不需要传递参数,但是,在调用数值的toString()方法的时候,可以传递一个参数,输出数值的基数.默认情况下,toString() 方法以十进制格式返回数值的字符串表示,而通过传递基数,toString() 方法可以输出十进制,八进制,十六进制,二进制乃至其他任何有效进制的数据,示例如下:

        var num = 10;
        console.log(num.toString());      //'10'
        console.log(num.toString(2));     //'1010'
        console.log(num.toString(8));     //'12'
        console.log(num.toString(10));    //'10'
        console.log(num.toString(16));    //'a'

通过上面的实例,我们可以看出,通过指定基数,toString() 方法会改变输出的值,而数值10根据基数的不同,可以在输出的被转化为不同的数值格式.注意,在默认情况下输出的值与指定基数10 的结果是相同的.

3.2 String()

在不知道要转换的值是 null 或是 undefined 的情况下.还可以使用转型函数String(),这个函数能够将任意类型的值转化为字符串,String() 方法的转换遵循以下规则:

  • 如果值有toString() 方法,则会调用 toString() 方法;
  • 如果值是null, 则会返回 "null";
  • 如果值是undefined 则会返回"undefined";
    示例如下:
        var a = 10;
        var b = true;
        var c = null;
        var d ;
        console.log(String(a));     //'10'
        console.log(String(b));     //'true'
        console.log(String(c));     //'null'
        console.log(String(d));     //'undefined'

4. 转布尔值

没有toBoolean()这个方法,但有全局方法Boolean()。

数据类型转为ture的值转为false的值
Booleantruefalse
String任何非空字符串“”(空字符串)
Number任何非零数值(包括无穷大)0和NaN
Object任何对象null
undefined不适用undefined

总结:只有undefined,null, 0 ,空字符串,NaN 会转化为 false ,其余均为 true.

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值