javascript提供10个算术运算符

  • 加法运算符:x + y
  • 减法运算符: x - y
  • 乘法运算符: x * y
  • 除法运算符:x / y
  • 指数运算符:x ** y
  • 余数运算符:x % y
  • 自增运算符:x 或者 x
  • 自减运算符:—x 或者 x—
  • 数值运算符: +x
  • 负数值运算符:-x

加法运算符

  • JavaScript 允许非数值的相加 true + true // 2 1 + true // 2
  • 两个字符串相加,这时加法运算符会变成连接运算符,返回一个新的字符串
    'a' + 'bc' // "abc"
  • 如果一个运算子是字符串,另一个运算子是非字符串,这时非字符串会转成字符串,再连接在一起
  • 如果两个非字符串运算子在前已经相加,则先运算再连接
  • 括号大于一切 ```html var c = ‘a’ + 1 console.log(c) //a1

var d = 1 + ‘a’ + 1 console.log(d) //1a1

var a = 1 + 1 + ‘a’ console.log(a) //2a

var b = 1 + 1 + ‘a’ + (1 + 1) console.log(b) //2a2

  1. - 除了加法运算符,其他算术运算符(比如减法、除法和乘法)都不会发生重载。它们的规则是:所有运算子一律转为数值,再进行相应的数学运算<br />`1 - '2' // -1 1 * '2' // 2 1 / '2' // 0.5`
  2. <a name="250f8716"></a>
  3. ### undefined null
  4. `undefined+7 //NaN null+7 //7`
  5. <a name="e302b064"></a>
  6. ### 对象相加
  7. 对象相加,首先,自动调用对象的valueOf方法,再自动调用对象的toString方法,对象的toString方法默认返回[object Object]
  8. ```javascript
  9. var obj = { p: 1 }; obj + 2 // "[object Object]2"
  10. var obj = { p: 1 };
  11. obj.valueOf() // { p: 1 }
  12. var obj = { p: 1 };
  13. obj.valueOf().toString() // "[object Object]"

可以自定义对象的valueOf和toString方法

  1. var a = {
  2. valueOf : function(){
  3. return 1;
  4. },
  5. toString : function(){
  6. return 'hello';
  7. }
  8. }
  9. console.log(a+'1'); //11
  10. //如果运算子是一个Date对象的实例,那么会优先执行toString方法
  11. var obj = new Date();
  12. obj.valueOf = function () { return 1 };
  13. obj.toString = function () { return 'hello' };
  14. obj + 2 // "hello2"

余数运算符

  1. 12 % 5 // 2
  2. //运算结果的正负号由第一个运算子的正负号决定
  3. -1 % 2 // -1
  4. 1 % -2 // 1
  5. var a = (10 * 3 - 4 / 2 + 1) % 2
  6. var b = 3
  7. b %= a + 3
  8. console.log('a ' + a) //1
  9. console.log('b ' + b) //3

自增和自减运算符

自增和自减运算符有一个需要注意的地方,就是放在变量之后,会先返回变量操作前的值,再进行自增/自减操作;放在变量之前,会先进行自增/自减操作,再返回变量操作后的值

  1. var x=1,y=1;
  2. console.log(x++); //1
  3. console.log(x); //2
  4. console.log(++y); //2
  5. var a = 10
  6. var b = ++a - 1 + a++
  7. console.log(b + ' ' + a) //21 12

数值运算符,负数值运算符

数值运算符的作用在于可以将任何值转为数值(与Number函数的作用相同)
+true // 1 +[] // 0 +{} // NaN +'abc' //NaN;

负数值运算符(-),也同样具有将一个值转为数值的功能,只不过得到的值正负相反。连用两个负数值运算符,等同于数值运算符

指数运算符

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

  1. // 相当于 2 ** (3 ** 2)
  2. 2 ** 3 ** 2
  3. // 512

赋值运算符

  1. // 等同于 x = x + y
  2. x += y
  3. // 等同于 x = x - y
  4. x -= y
  5. // 等同于 x = x * y
  6. x *= y
  7. // 等同于 x = x / y
  8. x /= y
  9. // 等同于 x = x % y
  10. x %= y
  11. // 等同于 x = x ** y
  12. x **= y