js类型转换

1.js的隐式转换:减号(-)除号(/)乘号(*)求余(%):一律都会转换成数值后计算:

'11' - 2 = 9
'12' / 2 = 6
'12' % 2 = 0
'12' * 2 = 24

2.加号(+):

数字+字符串=字符串,运算顺序从左到右:

1 + '12' = 112

数字+对象,优先调用对象的valueOf->toString:

(toString是把对象转成字符串;valueOf是把数据类型转换成原始类型,也就是说原来是什么类型,转换后还是什么类型,日期类型除外)

[3].toString();//"3"

const obj={
  "a":1
}
obj.valueOf();//{a:1}

1 + {a:1};//"1[object Object]"

数字+boolean/null -> 数字(true是1,false是0,null是0):

1 + true = 2; 
1 + false = 1;
1 + null = 1;

数字+undefined/NaN=NaN:

1 + undefined/NaN = NaN
[1].toString()==='1'
{}.toString()==='[object object]'
NaN!===NaN、+undefined为NaN

+undefined;//NaN
NaN!===NaN;//true

拓展:

valueOf()会把数据类型转换成原始类型,也就是说原来是什么类型,转换后还是什么类型,日期类型除外。

toString()会把数据类型转换成string类型,也就是说不管原来是什么类型,转换后一律是string类型

valueOf()和toString()的区别:

  • valueOf()偏向于运算,toString()偏向于显示
  • 对象转换时优先调用toString()
  • 强转字符串的情况下,优先调用toString()方法;强转数字的情况下优先调用valueOf()
  • 正常情况下优先调用toString()
  • 在有运算操作符的情况下valueOf()的优先级高于toString(),这里需要注意的是当调用valueOf()方法无法运算后还是会再调用toString()方法
var a = { 
  a : 10 , 
  toString : function(){ 
    console.log("tostring"); 
    return this.a 
  } 
};
//先调用valueOf()方法,发现无法进行+运算,紧接着调用toString()方法
console.log(+a);//10


var b= {
  a:2,
  valueOf:function(){
    return this.a+2
  }
};
//先调用valueOf()方法,返回4,可以进行运算,不再调用toString()
console.log(+b);//4

var b= {
  a:2,
  valueOf:function(){
    return this.a+2
  },
  toString : function(){ 
    console.log("tostring"); 
    return this.a 
  }
};
console.log(+b);//4
//先调用valueOf()方法,返回4,可以进行运算,不再调用toString(),从输出上可以看出没有调用toString()方法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值