运算符-算数

43次阅读

共计 1495 个字符,预计需要花费 4 分钟才能阅读完成。

1. 概述
2. 加法运算符
2.1 基本规则
2.2 对象的相加
3. 余数运算符 % 正负看第一个运算字 可以用绝对值函数
4. 自增和自减运算符 ++ — ++x 2 y++1
5. 数值运算符,负数值运算符 + – 作用是转为数值 number 一样
6. 指数运算符 232 512 先算了 3 2
7. 赋值运算符 =

除了加法 其他都转为数值在运算
1. 概述

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

2. 加法运算符

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

由于加法运算符存在重载,可能执行两种运算,使用的时候必须很小心。

‘3’ + 4 + 5 // “345”
3 + 4 + ‘5’ // “75”

上面代码中,由于从左到右的运算次序,字符串的位置不同会导致不同的结果

2.2 对象的相加
运算子是对象,必须先转成原始类型的值,然后再相加。

对象转成原始类型的值,规则如下。

首先,自动调用对象的 valueOf 方法。

var obj = {p: 1};
obj.valueOf() // { p: 1}
一般来说,对象的 valueOf 方法总是返回对象自身,这时再自动调用对象的 toString 方法,将其转为字符串。

var obj = {p: 1};
obj.valueOf().toString() // “[object Object]”
对象的 toString 方法默认返回[object Object],所以就得到了最前面那个例子的结果。

知道了这个规则以后,就可以自己定义 valueOf 方法或 toString 方法,得到想要的结果。

var obj = {
valueOf: function () {

return 1;

}
};

obj + 2 // 3

这里有一个特例,如果运算子是一个 Date 对象的实例,那么会优先执行 toString 方法。

var obj = new Date();
obj.valueOf = function () { return 1};
obj.toString = function () { return ‘hello’};

obj + 2 // “hello2”

3. 余数运算符 % 正负看第一位

所以,为了得到负数的正确余数值,可以先使用绝对值函数。

// 错误的写法
function isOdd(n) {
return n % 2 === 1;
}
isOdd(-5) // false
isOdd(-4) // false

// 正确的写法
function isOdd(n) {
return Math.abs(n % 2) === 1;
}
isOdd(-5) // true
isOdd(-4) // false

4. 自增和自减运算符 ++ — ++x 2 y++1
5. 数值运算符,负数值运算符 + – 作用是转为数值 number 一样

数值运算符的作用在于可以将任何值转为数值

+true // 1
+[] // 0
+{} // NaN

var x = 1;
-x // -1
-(-x) // 1

6. 指数运算符 232 512 先算了 3 2
7. 赋值运算符 =

// 等同于 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