一元运算符
一元运算符,只需要一个操作数就可以了
- 正号
正号不会对数字产生任何影响
- 负号
负号可以对数字进行负号的取反
对于非number类型的值,它会先转换为number,然后在运算
可以对一个其他的数据类型使用 + ,来将其转换为number,其原理和number() 函数一样
var a = 123;
a = +a;
a = -a;
a = true;
a = -a;
console.log(a);
console.log(typeof a);
// 在字符串前面加一个加号 就相当于要字符串转换为number类型进行运算
var result = 1 + +"2" + 3;
console.log("result = " + result);
自增自减运算符
自增 ++
通过自增使变量在自身的基础上增加1
对于一个变量自增以后,原变量的值会立即自增1
a++ 和 ++a 都会立即使原变量的值自增1
不同的是a++ 和 ++a 的值不同
a++ 的值是原变量的值(自增前的值)
++a 的值是新值 (自增后的值)
自减 - -
通过自增使变量在自身的基础上减1
a-- 和 --a 都会立即使原变量的值自减1
不同的是a-- 和 --a 的值不同
a-- 的值是原变量的值(自减前的值)
–a 的值是新值 (自减后的值)
var a = 1;
// 使a自增1
a++;
console.log(a);
var b = 10;
c = ++b;
console.log(c,b);
逻辑运算符
js中为我们提供了三种逻辑运算符
&& 与
对于布尔值情况
可以对符号两侧的值进行运算与并返回结果
- 两端都是true,则返回true
- 只要有一个false,就返回false
js中的 “与” 属于短路与,如果第一个值为false 则不会看第二个了
第一个值为 true 就会看第二值
对于非布尔值情况
会先将其转换为布尔值然后在运算,并且返回原值
- 如果都有true 则返回后面那一个的值
- 如果第一个值为false,则直接返回第一个的值
|| 或
对于布尔值情况
可以对符号两侧的值进行运算与并返回结果
- 两端都是false,则返回false
- 只要有一个true,就返回true
js中的 “与” 属于短路或,如果第一个值为true 则不会看第二个了
第一个值为 false 就会看第二值
对于非布尔值情况
会先将其转换为布尔值然后在运算,并且返回原值
- 如果都有false 则返回后面那一个的值
- 如果第一个值为true,则直接返回第一个的值
!非
可以用来对一个值进行非运算,对布尔值进行取反操作
- true变false false变true
如果对非布尔值运算就会将其装换为布尔值然后进行取反操作
可以利用该特点将其他类型的值转换为布尔值,给任意数据类型取反两次就可以不改变数值的转换
var a = 10;
a = !a;
console.log(a);
var result = false|| false;
var result = true || false;
var result = true || true;
var result = false|| true;
console.log(result);
赋值运算符
-
=
可以将符号右侧的值赋值给符号左侧的变量 -
+=
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;
关系运算符
通过关系运算符可以比较两个值之间的关系
如果关系成立它会返回true,如果不成立就返回false
- (>) 大于号
- (<) 小于号
- (>=) 大于等于号
- (<=) 小于等于号
-
非数字的情况
- 对于非数字比较时,会将其转换成数字在将其比较
- 任何值与NaN做任何比较都是false
- 如果符号两侧的值都是字符串,不会将其转换为数字进行比较,会分别转换为Unicode码然后一位一位进行比较
- 可以利用这个来进行英文的排序
注意:在比较两个字符串型的数字时,一定要转型,不然结果就可能会出问题,在字符串前面加一个加号就可以转为数字
相等运算符
相等运算符用来比较两个值是否相等
如果两个值相等会返回true,不相等返回false
使用 == 来做相等运算
- 当使用 == 来比较两个值,如果值的类型不同,则会自动进行类型转换。将其转换为相同的类型,然后在比较
不相等 !=
- 不相等返回true 否则返回false
全等 ===
- 值和类型要全部相等 才返回true 否则false
不全等 !==
- 值和类型有一个不同就会返回true
undefined 衍生自null,所以这两个值做相等是返回true
注意:NaN不和任何值相等包括它本身,但是可以通过isNaN()函数来判断一个值是否相等与NaN,如果该值是NaN则返回true 否则false
var b = NaN;
console.log(isNaN(b));
条件运算符
条件运算符也叫三元运算符
条件表达式? 语句1 : 语句2;
条件运算符在执行时 首先对条件表达式进行求值
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
如果条件表达式是一个非布尔值,就会先转换为布尔值进行求值,在判断执行语句1或2
var a = 1;
var b = 2;
var c = 3;
d = a > b ? console.log(0) : console.log(1);
console.log(d);
这些运算符跟数学里的一样,都是具有优先级的,不过对于这么多的运算符要都去记优先级是比较困难的
所以有要用到优先级的可以去查运算符的优先级表,也可以用小括号将要先计算的表达式括起来