运算符-算数

1.概述
2.加法运算符
2.1基本规则
2.2对象的相加
3.余数运算符% 正负看第一个运算字 可以用绝对值函数
4.自增和自减运算符++ — ++x 2 y++1
5.数值运算符,负数值运算符+ – 作用是转为数值number一样
6.指数运算符 232 512先算了32
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先算了32
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
这些复合的赋值运算符,都是先进行指定运算,然后将得到值返回给左边的变量。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理