一元操作符
一元操作符可以作用于数值类型和非数值类型,当作用于非数值类型时,会先将非数值转换为数值类型,然后再进行一元运算。
递增递减操作符
使用++
、--
两种符号表示递增和递减,同时根据符号位置的不同,又分为前置递增递减和后置递增递减:
- 递增递减操作符前置时,先执行递增递减操作,再执行其他运算
- 递增递减操作符后置时,先执行其他运算,再执行递增递减操作
var num1 = 10;
var n = ++num1; // 前置递增,先执行递增计算,再对n进行赋值,所以,n=11,num1=11
var num2 = 10;
var m = --num2; // 前置递减,先执行递减计算,再对m进行赋值,所以,m=9,num2=9
var x = num2++; // 后置递增,先赋值,再执行递增计算,所以,x=9,num2=10;
一元加、一元减操作符
+
表示一元加操作符,-
表示一元减操作符,这两种操作符放在数值前面,相当于属数学中的正负号。
var a = 10;
console.log(-a); // -10
console.log(+a); // 10
布尔操作符
布尔操作符有三个:与、或、非
- 逻辑非:
!
符号表示,所有类型都可以逻辑非,两个逻辑非同时使用的效果类型Boolean() - 逻辑与:
&&
符号表示,两个操作数都为TRUE时结果才为TRUE,否则为FALSE;逻辑与属于短路操作,如果第一个操作数为FALSE,就不会再继续执行&&
后面的部分; - 逻辑或:
||
符号表示,两个操作数有一个结果为TRUE结果就是TRUE;逻辑或也是短路操作,只要第一个操作数为TRUE,就不会再执行||
后面的部分,直接返回TRUE。
在进行||
、&&
操作时,如果有一个操作数不是布尔值,返回结果也不一定是布尔值:
{} && false; // false
false && {}; // {}
{na:1} && {na:2}; // {na:2}
null && false; // null
NaN && false; // NaN
undefined && false; // undefined
{} || false; // {}
1 === 2 || false; // false
{n:1} || {n:2}; // {n:1}
null || null; // null
NaN || NaN; // NaN
undefined || undefined; // undefined
乘性操作符
三种乘性操作符:乘法、除法、求模
- 在执行乘性计算时,如果有一个操作数不是数值,会首先使用Number()转型函数将其转换成数值,然后再进行乘性计算
- 乘法和除法分别用
*
、/
表示 - 求模操作,就是求两个操作数的余数,使用
%
表示:26 % 7
,结果是5
加性操作符
两种加性操作符:加法、减法
- 加法操作符使用
+
表示,减性操作符使用-
表示 - 在使用加性操作符时有一个特殊情况,那就是如果有一个操作数为字符串或者两个操作数都是字符串的情况下,这时执行的是字符串拼接的操作
相等操作符
相等操作符中有两种情况:
==
和!=
相等和不相等
- 使用这一组操作符时,首先会对操作数进行强制转换数据类型(把其他数据类型转换为数值类型),然后在进行比较
- null和undefined相等
- 如果一个操作数是NaN,不管第二个操作数是什么都返回FALSE
- 比较两个对象是否相等时,比较他们两个是否指向同一个对象
===
和!==
全等和不全等
- 比较之前不对操作数进行类型转换(这应该是和相等不相等之间唯一的区别)
"5" === 5; // false ,全等比较前不进行类型转换,字符串不等于数值
null === undefined; // false ,数据类型不同,是不同的值
条件操作符
var a = true ? 1 : 2
;