运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,覆盖了所有主要的运算。
一.概述
- 运算符总览10个:①加法运算符:
x + y
;②减法运算符:x - y
;③乘法运算符:x * y
;④除法运算符:x / y
;⑤指数运算符:x ** y
;⑥余数运算符:x % y
;⑦自增运算符:++x
或者x++
;⑧自减运算符:--x
或者x--
;⑨数值运算符:+x
;⑩负数值运算符:-x
; - 对象使用加法运算符,调用过程? 先使用valueof返回对象本身,然后调用valueof返回值的toString方法,输出为字符串,然后执行相加操作 具体见:加法运算符
- ++运算符放在前后的区别?
++x
修改原值x++
不会修改原值 具体见:自增和自减运算符
二.加法运算符
1.基本规则
-
加法运算符
+
,用来求和,针对不同类型有不同的表现 -
数值求和,非数值的相加,一boolean类型会转为数字;二其余类型与字符串相加就会转为字符串(不同的类型使用相同
+
的符号相加,出现不同的运算结果叫做重载
)//一基本计算 1 + 1 // 2 //二boolean转为数字 true + true // 2 1 + true // 2 //三与字符串相加 'a' + 'bc' // "abc" 1 + 'a' // "1a" false + 'a' // "falsea" //四重载 '3' + 4 + 5 // "345" 3 + 4 + '5' // "75"
-
除了加法运算会
重载
其余运算符会将字符转为数值类型进行计算1 - '2' // -1 1 * '2' // 2 1 / '2' // 0.5
2.对象相加
-
如果运算的是对象,则对象必须先转为原始类型的值,再相加;
-
对象相加运算的流程:一对象调用
valueOf
对象返回自身;二调用对象的toString
将自身转换为字符串,执行运算var obj = { p: 1 }; obj + 2 // "[object Object]2" //与下面执行过程相同 var obj = { p: 1 }; obj.valueOf().toString() // "[object Object]"
-
我们可以自定义
valueof
或toString
修改对象相加的默认行为 -
若自定义了
valueOf
,例如返回Number数据类型,就会调用Number数据类型的toString
方法//一定义valueOf var obj = { valueOf: function () { return 1; } }; obj + 2 // 3 //二定义toString var obj = { toString: function () { return 'hello'; } }; obj + 2 // "hello2" //三如果是Date实例直接执行toString方法,不会执行重写的valueOf方法 var obj = new Date(); obj.valueOf = function () { return 1 }; obj.toString = function () { return 'hello' }; obj + 2 // "hello2"
三.自增和自减运算符
-
++x
修改原值x++
不会修改原值var x = 1; var y = 1; //x是先返回当前值,然后自增,所以得到1 x++ // 1 //y是先自增,然后返回新的值,所以得到2 ++y // 2
四.赋值运算符
-
赋值运算符(Assignment Operators)用于给变量赋值
-
复合的赋值运算符,运算规则:先进行指定运算,然后将得到值返回给左边的变量
//一 =是常见赋值运算符 // 将 1 赋值给变量 x var x = 1; // 将变量 y 的值赋值给变量 x var 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 // 等同于 x = x ^ y x ^= y