2020-06-16 JS数据类型之间的相互转换

2020-06-16 JS数据类型之间的相互转换

运算符

常用的有算术运算符(加减乘除和赋值)、比较运算符和布尔运算符

加法运算符
加法运算符(+)是最常见的运算符也是最复杂的,用来求两个数值的和

1 + 1 // 2

JavaScript允许非数值的相加

true + true // 2
1 + true // 2

上面两代码,第一个是两个布尔值相加,第二个是数值和布尔值相加,这两种情况布尔值都会自动转成数值,然后相加;比较特殊的是如果两个运算子中有一个是字符串,这时非字符串会转成字符串,加法运算符会变成连接运算符,把两个相连接起来

1 + 'a' // "1a"

加法运算符是在运算时决定,到底是执行相加还是执行连接,也就是说,运算子的不同,导致了不同的语法行为,这种现象称为“重载”(overload

'3' + 4 + 5 // "345"
3 + 4 + '5' // "75"

加法运算符的规则如下:

  1. 当一侧为String类型,被识别为字符串拼接,并会优先将另一侧转换为字符串类型。
  2. 当一侧为Number类型,另一侧为原始类型,则将原始类型转换为Number类型。
  3. 当一侧为Number类型,另一侧为引用类型,将引用类型和Number类型转换成字符串后拼接
  4. 当两侧都是引用类型,则转化为原始类型的值在相加

除了加法运算符,其他算术运算符(比如减法、乘法和除法)都不会发生重载,它们的规则是:所有运算子一律转为数值,再进行相应的数学运算

1 - '2' // -1
1 * '2' // 2
1 / '2' // 0.5

如果运算子是对象,必选先转成原始类型的值,然后在相加

var obj = {
    p: 1 };
obj + 2 // "[object Object]2"

对象转成原始类型的值,规则如下:
首先,自动调用对象的valueOf方法,一般返回对象自身;
然后在调用对象的toString方法,将其转为字符串

var obj = {
    p: 1 };
obj.valueOf() // {p:1}
obj.valueOf().toString() // "[object Object]"

数值运算符
数值运算符(+-)只需要一个操作数,它的作用在于可以将任何值转为数值(与Number函数的作用相同),返回一个新的值,不会改变原始变量的值

+true // 1
+[] // 0
+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值