类型转换

类型转换

一 转换成字符串

toString()方法

几乎每一个值都有toString()方法。

var age = 18;
console.log(age.toString());    //'18'

var result = true;
console.log(result.toString()); //'true'

数值类型的toString()方法,可以传入一个参数,输出对应进制的值。

String()函数

有些值没有toString()方法,这个时候可以使用String()。比如undefinednull

(1)原始类型值

数值:转为相应的字符串
字符串:不变
布尔值:true转换为字符串'true'false转换为字符串'false'
undefined:转换为字符串'undefined'
null:转换为字符串'null'

var age = 18;
console.log(String(age));    //'18'

var result = true;
console.log(String(result)); //'true'

console.log(String(undefined)); //'undefined'

console.log(String(null));  //'null'

(2)对象
String的参数如果是对象,就返回一个类型字符串;如果是数组,则返回数组的字符串形式。

console.log(String({a: 1}));        //'[object Object]'
console.log(String([1, 2, 3]));     //'1,2,3'

转换规则:与Number方法基本相同,只是互换了valueOftoString的执行顺序。
(1)先调用自身的toString方法,如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤
(2)如果toString方法返回的是对象,再调用原对象的valueOf方法。如果valueOf方法返回原始类型的值,则对该值使用String函数,不再进行以下步骤。
(3)如果valueOf方法返回的是对象,报错。

使用拼接字符串(加一个空的字符串)

var age = 18;
console.log(age + '');

var result = true;
console.log(result + ''); //'true'

console.log(undefined + ''); //'undefined'

console.log(null + '');  //'null'

二 转换成数值类型

Number()函数

可以把任意值转换成数值。
下面分为两种情况讨论,一种是参数为原始类型的值,另一种是参数为对象。

原始类型值
//数值:转换后还是原来的值
console.log(Number(123));   //123

//字符串:如果可以被解析成数值,就转换为相应的数值;不可以被解析成数值,返回NaN
console.log(Number('123'));     //123
console.log(Number('123abc'));  //NaN

//空字符串转换为0
console.log(Number(''));    //0
console.log(Number(' '));   //0

//会自动过滤字符串前导和后缀的空格(parseInt相同)
console.log(Number('\t\v\r123.123\n')); //123.123

//布尔值:true转换为1,false转换为0
console.log(Number(true));  //1
console.log(Number(false)); //0

//undefined:转换为NaN
console.log(Number(undefined)); //NaN

//null:转换为0
console.log(Number(null));  //0
对象

除非是包含单个数值的数组,否则都是返回NaN。

转换规则:
(1)调用自身的valueOf方法。如果返回原始类型的值(包含单个数值的数组会返回原始类型的值,其余的都是返回对象),则直接对该值使用Number函数,不再进行后续步骤;
(2)如果valueOf返回的还是对象,则改为调用对象自身的toString方法,如果返回原始类型的值(一般返回[object Object]),则对该值使用Number函数,不再进行后续步骤;
(3)如果toString方法返回的是对象,就报错。

console.log(Number({}));        //NaN
console.log(Number({x: 1}));    //NaN
console.log(Number([1, 2]));    //NaN
console.log(Number([1]));       //1

//如果toString方法返回的不是原始类型,会报错
var o = {
    toString: function(){
        return {};
    }
};
console.log(Number(o)); //TypeError: Cannot convert object to primitive value

valueOftoString方法都是可以自定义的

var o1 = {
valueOf: function () {
    return 1;
}
};
var o2 = {
    toString: function () {
        return 2;
    }
};
var o3 = {
    toString: function () {
        return 2;
    },
    valueOf: function () {
        return 1;
    }
};

console.log(Number(o1));    //1
console.log(Number(o2));    //2
console.log(Number(o3));    //1 valueOf方法先于toString方法执行

parseInt()函数

parseFloat()

参看文章 parseInt与parseFloat

使用运算符

使用减乘除都可以(加是拼接字符串)

console.log('100' - 0); //100
console.log('100' * 1); //100
console.log('100' / 1); //100

三 转换成布尔类型

Boolean函数

可以将任意类型的值转为布尔值。

转换为false的值:false""0NaNnullundefined。其余的值转换后全部为true

console.log(Boolean(0));    //false
console.log(Boolean(NaN));  //false
console.log(Boolean(undefined));    //false
console.log(Boolean(null)); //false
console.log(Boolean(''));   //false

所有的对象(包括空对象)的转换结果都是true。甚至false对应的布尔对象new Boolean(false)也是true

console.log(Boolean({}));                   //true
console.log(Boolean([]));                   //true
console.log(Boolean(new Boolean(false)));   //true

两个逻辑非运算

第一个逻辑非操作会基于无论什么操作数返回一个布尔值;
第二个逻辑非操作则对该布尔值求反;
于是就得到了这个值真正对应的布尔值(结合性从右向左)

console.log(!!('123')); //true
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值