文章目录
算术运算符
- 加法运算符:x+y
- 减法运算符:x-y
- 乘法运算符:x*y
- 除法运算符:x/y
- 余数运算符:x%y
- 指数运算符:x**y
- 自增运算符:x++、++x
- 自减运算符:x–、--x
- 数值运算符:+x
- 负数运算符:-x
加法运算符
JavaScript中加法与大多数语言一致,加号可连接字符串。
console.log(1+1); //2
console.log(1+'hello'); //1+hello
console.log(1+2+'3'); //33
bool值相加会将bool值转换为数值,再进行运算
console.log(1+true); //2
console.log(true+true); //2
其他算术运算符
除加法运算符外,其余算数运算符都会先将参与运算的操作数转化数值,再执行运算
console.log(1-'2'); //-1
console.log(1*'2'); //2
console.log(1/'2'); //0.5
对象的相加
如果参与加法运算的操作数为对象,需先将其转化为原始类型(一般为[object object]),再相加。
var person={
name:'Maria',
age:20,
sex:"女"
};
console.log(person+1); //[object Object]1
原始类型: Null,Undefined,Boolean,Number,String,Symbol,Object
转换为原始类型的过程:
-
调用对象的valueOf(),返回对象本身
var person={ name:'Maria', age:20, sex:"女" }; console.log(person.valueOf()); //{name: "Maria", age: 20, sex: "女"}
-
调用对象的toString(),默认返回[object object]
var person={ name:'Maria', age:20, sex:"女" }; console.log(person.toString()); //[object Object]
了解到转换为原始类型的过程后,我们可以自定义valueOf()或toString()来实现对象的相加
// 自定义valueOf
var person={
name:'Maria',
age:20,
sex:"女",
valueOf:function(){
return this.age;
}
};
console.log(person+1); //21
// 自定义toString
var person={
name:'Maria',
age:20,
sex:"女",
toString:function(){
return this.age;
}
};
console.log(person+1); //21
注意: 如果操作数为Date对象,则其转换为原始类型会先调用toString方法
余数运算符
运算结果的正负号由第一个操作数决定,建议使用绝对值(Math.abs)