JavaScript之运算符-算数运算符

JavaScript 共提供10个算术运算符,用来完成基本的算术运算。
加法运算符:x + y
减法运算符: x - y
乘法运算符: x * y
除法运算符:x / y
指数运算符:x ** y
余数运算符:x % y
自增运算符:++x 或者 x++
自减运算符:–x 或者 x–
数值运算符: +x
负数值运算符:-x

加法运算符

加法运算符(+)是最常见的运算符,用来求两个数值的和,并允许非数值的相加。

  1. 数值+数值
    返回数值
  2. 布尔值+布尔值
    布尔值都会自动转成数值,然后再相加。true为1,false为0。
  3. 数值+布尔值
    布尔值先自动转成数值,然后再相加
  4. 字符串+字符串
    如果是两个字符串相加,这时加法运算符会变成连接运算符,返回一个新的字符串,将两个原字符串连接在一起。
  5. 字符串+非字符串
    如果一个运算子是字符串,另一个运算子是非字符串,这时非字符串会转成字符串,再连接在一起。
    重载:
    加法运算符是在运行时决定是执行相加,还是执行连接。也就是说,运算子的不同,导致了不同的语法行为,这种现象称为“重载”
    除了加法运算符,其他算术运算符都不会发生重载。它们的规则是:所有运算子一律转为数值,再进行相应的数学运算。
  6. 对象+对象
    如果运算子是对象,必须先转成原始类型的值,然后再相加。
    对象转成原始类型的值:
    (1)自动调用对象的valueOf方法。
var obj = {
    p: 1,
    q: 2,
}
obj.valueOf();//返回{p:1,q:2}
obj.valueOf().toString();//返回"[object Object]"

(2)若valueOf方法直接返回一个原始类型的值,则不再调用toString方法;若对象的valueOf方法返回对象自身,这时再自动调用对象的toString方法,将其转为字符串。
(3)如果运算子是一个Date对象的实例,那么会优先执行toString方法。

//自定义valueOf()函数
var obj = {
    a: 3,
    valueOf: function() {
        return 5;
    }
}
obj + 2 // 7

//自定义toString()函数
var obj = {
    toString: function() {
        return 'hello';
    }
};
obj + 2 // "hello2"

//自定义valueOf()函数和toString()函数
var obj = {
    a: 3,
    valueOf: function() {
        return 5;
    },
    toString: function() {
        return 'hello';
    }
};
obj + 2 // 7 若valueOf方法直接返回一个原始类型的值,则不再调用toString方法

//若如果运算子是一个Date对象的实例,那么会优先执行toString方法。
var obj = new Date();
obj.valueOf = function() { return 1 };
obj.toString = function() { return 'hello' };
obj + 2 // "hello2"

余数运算符

余数运算符(%)返回前一个运算子被后一个运算子除,所得的余数,运算结果的正负号由第一个运算子的正负号决定。所以,为了得到负数的正确余数值,可以先使用绝对值函数。

12 % 5 // 2
-1 % 2 // -1
1 % -2 // 1
function isOdd(n) {
    return Math.abs(n%2)===1;
}
isOdd(-5) // true
isOdd(-4) // false

自增和自减运算符

自增和自减运算符,是一元运算符,只需要一个运算子。它们的作用是将运算子首先转为数值,然后加上1或者减去1。它们会修改原始变量
运算之后,变量的值发生变化,这种效应叫做运算的副作用。自增和自减运算符是仅有的两个具有副作用的运算符,其他运算符都不会改变变量的值。
自增和自减运算符有一个需要注意的地方,就是放在变量之后,会先返回变量操作前的值,再进行自增/自减操作;放在变量之前,会先进行自增/自减操作,再返回变量操作后的值。

数值运算符

数值运算符的作用在于可以将任何值转为数值(与Number函数的作用相同)。
负数值运算符(-),也同样具有将一个值转为数值的功能,只不过得到的值正负相反。连用两个负数值运算符,等同于数值运算符。
数值运算符号和负数值运算符,都会返回一个新的值,而不会改变原始变量的值。

+true // 1
+[] // 0
+{} // NaN
var x = 3;
-x // -3
-(-x) // 3

指数运算符

指数运算符是右结合,而不是左结合。即多个指数运算符连用时,先进行最右边的计算。

4**2;//16
2**2**3//2**(2**3)=256

赋值运算符

赋值运算符用于给变量赋值。
最常见的赋值运算符是等号(=),它还可以与其他运算符结合,形成变体。

// 等同于 x = x >> y
x >>= y
// 等同于 x = x << y
x <<= y
// 等同于 x = x >>> y
x >>>= y
// 等同于 x = x & y
x &= y
// 等同于 x = x | y
x |= y
// 等同于 x = x ^ y
x ^= y
// 等同于 x = x + y
x += y
// 等同于 x = x - y
x -= y
// 等同于 x = x * y
x *= y
// 等同于 x = x / y
x /= y
// 等同于 x = x % y
x %= y
// 等同于 x = x ** y
x **= y
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值