操作符
一元操作符
- 概念
- 只操作一个值的操作符叫一元操作符
- 一元运算会直接修改原始变量的数据
递增/递减操作符
-
前缀操作运算
前缀++
先加1,后参与运算前缀--
先减1,后参与运算- 无论使用前缀递增还是前缀递减操作符,变量的值都会在语句被求值之前改变
- 在计算机科学中,这通常被称为具有副作用
-
后缀操作运算
后缀++
先参与运算,后加1后缀--
先参与运算,后减1
一元加和减
- 一元加
- 对数值没有任何影响
- 一元加应用到非数值,则会执行与使用Number()转型函数一样的类型转换
let s1= '01',
s2= '1.1',
s3= 'z',
b= false,
f= 1.1,
o= {
valueOf(){
return -1;
}
};
console.log(+s1);
console.log(+s2);
console.log(+s3);
console.log(+b);
console.log(+f);
console.log(+o);
- 一元减
- 用于把数值变为负值
- 一元减应用到非数值,会遵循一元加的规则,再取负值
let s1= '01',
s2= '1.1',
s3= 'z',
b= false,
f= 1.1,
o= {
valueOf(){
return -1;
}
};
console.log(-s1);
console.log(-s2);
console.log(-s3);
console.log(-b);
console.log(-f);
console.log(-o);
布尔操作符
-
逻辑非
- 逻辑非操作首先将操作数转换为布尔值,再对其取反
- 逻辑非操作符可以用于把任何值转换为布尔值
-
逻辑与
- 逻辑与操作符可用于任何类型的操作数,不限于布尔值
- 如果操作数不是布尔值,则逻辑与并不一定会返回布尔值
- 如果第一个操作数是对象,则返回第二个操作数
- 如果第二个操作数是对象,则只有第一个操作数求值为true才会返回该对象
- 如果两个操作数都是对象,则返回第二个操作数
- 如果有一个操作数是null,则返回null
- 如果有一个操作数是NaN,则返回NaN
- 如果有一个操作数是undefined,则返回undefined
let res= {'name':'Sunny'} && 'Jerry';
console.log(res); // Jerry
let res= 'Jerry' && {'name':'Sunny'};
console.log(res); // { name: 'Sunny' }
let res= {'name':'Jerry'} && {'name':'Sunny'};
console.log(res); // { name: 'Sunny' }
let res= {'name':'Jerry'} && null;
console.log(res); // null
let res= {'name':'Jerry'} && NaN;
console.log(res); // NaN
let res= {'name':'Jerry'} && undefined;
console.log(res); // undefined
- 逻辑或
- 如果操作数不是布尔值,则逻辑或并不一定会返回布尔值
- 如果第一个操作数是对象,则返回第一个操作数
- 如果第一个操作数求值为false,则返回第二个操作数
- 如果两个操作数都是对象,则返回第一个操作数
- 如果两个操作数都是null,则返回null
- 如果两个操作数都是NaN,则返回NaN
- 如果两个操作数都是undefined,则返回undefined
- 如果操作数不是布尔值,则逻辑或并不一定会返回布尔值
let res= {'name':'Sunny'} || 'Jerry';
console.log(res); // { name: 'Sunny' }
let res= '' || {'name':'Sunny'};
console.log(res); // { name: 'Sunny' }
let res= {'name':'Jerry'} || {'name':'Sunny'};
console.log(res); // { name: 'Jerry' }
let res= null || null;
console.log(res); // null
let res= NaN || NaN;
console.log(res); // NaN
let res= undefined || undefined;
console.log(res); // undefined
短路现象
-
逻辑与
- 如果第一个操作数决定了结果,那么不会对第二个操作数求值
- 第一个操作数为false,第二个操作数不作为
-
逻辑或
- 如果第一个操作数决定了结果,那么不会对第二个操作数求值
- 第一个操作数为true,第二个操作数不作为
-
逻辑或的短路应用
let obj= preObj || bacObj
- 如果首选对象不为空,则返回首选对象,被选对象不作为
乘性操作符
- 分类
- 乘法操作符
- 除法操作符
- 取模操作符
指数操作符
- 指数操作符的表现形式
Math.pow()
**
const num= 4;
console.log(num**2); // 16
console.log(Math.pow(num, 2)); // 16
console.log(num**0.5); // 2
console.log(Math.pow(num, 0.5)); // 2
加性操作符
- 分类
- 加法操作符
- 减法操作符
关系操作符
相等操作符
- 分类
- 等于和不等于:只进行值得比较
- 全等和不全等:类型和值同时相等,则相等
条件操作符
let max= (num1>num2)?num1:num2;
赋值操作符
逗号操作符
- 概念
- 逗号操作符可以用来在一条语句中执行多个操作
- 在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值
let num= (1, 2, 3, 4, 5);
console.log(num); // 5
操作符优先级
- 优先级从高到底
- 括号 ()
- 一元运算符 ++ -- !
- 乘性运算符 * / %
- 加性运算符 + -
- 关系运算符 > >= < <=
- 相等运算符 == != === !==
- 逻辑运算符 先&& 后||
- 赋值运算符