目录
1.一元运算符 + -
对于Number来说
- +:不会有任何影响
- -:对数字进行负号取反
对于非Number来说
- 先将其转换为Number,然后再运算
- 可以对其他任意类型,使用+,将其转换为Number, 其原理和使用Number();一样。如:
var a = 1 + "2" + 3;
console.log("result = " + a)
//a的结果是String “123”
var a = 1 + +"2" + 3;
console.log("result = " + a)
//a的结果是Number 6
2.自减–/自增++ (会影响原变量的值)
++a
- 自增1,使用 没有自增1的值 参与运算;
a = 20;
a = a++;
//a++后的值为21,使用原值参与运算,故将原值20重新赋值给a
//a最终的值为20
a++
- 自增1,使用 自增1后的值 参加运算
自减同理
3.三种逻辑运算符 !非 &&与 ||或
!非
- 对一个布尔值取反,false变true;true变false
- 对一个值两次取反,不会变化
- 对非布尔值运算,会先将其变为布尔值,再取反
- 可利用该特性,可以 使用两次取反,将非布尔值转换为布尔值
&&与
布尔值情况
- 对符号两侧的值进行与运算,并返回结果
- 只要有一个false就返回false;都为true,才返回true
- 短路特性,第一个值为false,第二个值不会再判断;第一个值为true,还会检查第二个值
非布尔值
- 先将其 转换为布尔值,再运算,并且返回原值
- 如果第一个值是false,直接返回false的原值
- 如果第一个值是true,直接返回第二个值的原值
- 补充:
- 如果两个值都为true,返回第二个值
- 如果有false,返回靠前的false
- 如果两个都是false,返回第一个值
- 如果有一个为false,则返回false
||或
布尔值情况
- 对符号两侧的值进行或运算,并返回结果
- 只要有一个true,就返回true;如果都为false,才返回false
- 短路特性,第一个值为true,不会检查第二个;第一个值为false,才会检查第二个
非布尔值
- 如果第一个值为true,则直接返回第一个值的原值,第二个值被短路
- 如果第一个值是false,则直接返回第二个值的原值
与&& 像爱情,都为真,才为真,其余都是假;
或|| 像亲情,都为假,才为假,其余都是真;
4.赋值运算符
- = :右侧值赋值给左侧变量
- +=: a+=5 -> a=a+5;
- -=: a-=5 -> a=a-5;
- *=: a=5 -> a=a*5;
- /=: a/=5 -> a=a/5;
- %=:a%=5 -> a=a%5;
5.关系运算符> >= < <= == === !==
数值情况
- 比较大小,关系成立返回true,关系不成立返回false
非数值情况
- 对于数值和非数值比较,转换为数值再比较
- 任何值和NaN比较都是false
- 符号两侧的值都是字符串,不会将其转换为数值比较,而是一位一位比较其对应的字符编码,如果两位一样,则比较下一位
- 比较两个字符串型数字时,一定要注意转型,可使用 +"abcd"
==相等运算符
- 相等返回true,不相等返回false
- 如果类型不同,会自动统一类型再比较,大几率转换为Number
- undefined衍生于null,所以这两比较,结果为true
- NaN不和任何值相等,包括它本身, 可以通过isNaN()函数来判断一个值是否为NaN,该值是NaN返回true,不是NaN返回false
!=不相等运算
- 不相等返回true,相等返回false
- 不相等也会自动进行类型转换
===全等
- 判断两个值是否全等,与==类似,但不会进行类型转换,要是两个值类型不同,直接返回false
!==不全等
- 判断两个值是否不全等,与!=类似,但不会进行类型转换,类型不同,直接返回false
6.条件运算符(三元运算符) 表达式?语句1:语句2
7. , 运算符
- 可以使用 , 同时声明多个变量并赋值
8.运算符的优先级
- 可以查运算符优先级表,要是运算符优先级一样高,从左往右运算
- 遇到优先级不清楚的,可以使用括号改变优先级