【JS】基础-运算符

157 阅读2分钟

一、运算符和表达式

1. 运算符

  1. 运算符就是进行运算的符号,如+、-、*、/等
  2. 运算符一起运算的数据(直接量、变量、表达式),称为该运算符的操作数

2. 表达式

  1. 数据与运算符可以共同组成一个表达式,表达式有个计算结果,成为表达式的值
  2. 一个直接量、一个变量是最简单的表达式,称为原始表达式
  3. 多个简单表达式可以组成一个复杂的表达式
  4. 有些表达式具有副作用,表达式的计算过程中会修改操作数的值,运算符决定表达式有没有副作用

image.png

二、运算符的分类

1. 按照运算符需要的操作数的个数

一元运算符(一目运算符)

二元运算符(二目运算符)

三元运算符(三目运算符)

2. 按照运算符的功能

  1. 算术运算符
  2. 关系运算符(比较运算符)
  3. 逻辑运算符
  4. 位运算符(很少用)
  5. 赋值运算符
  6. 其他运算符

三、运算符具体功能

1. 算术运算符

运算符含义操作数个数操作数类型要求表达式值得类型有无副作用
+相加2numbernumber
-相减2numbernumber
*相乘2numbernumber
/相除2numbernumber
%取余2numbernumber
+正号1numbernumber
-负号1numbernumber
++累加1numbernumber
--累减1numbernumber
  • 利用+(正号)来将其他类型转为number类型

    var numStr = " 123.09 ";
    var bol = true;
    console.log(+numStr); //123.09
    console.log(+bol);  //1
    console.log(+ 'num'); //NaN
    
  • +什么时候是正号?什么时候是加号?

    如果只有一个操作数表示正号,如果有两个操作数,表示相加

  • 累加累减运算符在前和在后的区别

    在前表示表达式是操作的累加或累减后的值;在后表示表达式是操作的累加或累减前的值

    var num = 45;
    console.log(++num); //46 num=46
    console.log(num++); //46 num=47
    console.log(num--); //47 num=46
    console.log(--num); //45 num=45
    console.log(num); //45
    

2. 关系运算符(比较运算符)

运算符含义操作数个数操作数类型要求表达式值的类型有无副作用
大于2number(除了两个都是string)boolean
>=大于等于2number(除了两个都是string)boolean
<小于2number(除了两个都是string)boolean
<=小于等于2number(除了两个都是string)boolean
==相等2number(除了两个都是string)boolean
!=不相等2number(除了两个都是string)boolean
===全等2不要求boolean
!==不全等2不要求boolean
  • 全等判断和相等判断的区别:

    1. 相等判断

      如果两个操作数类型不一致,会进行隐式转换转为number再进行比较

      (=表示赋值并不是相等,注意和==区分)

    2. 全等判断

      如果两个操作数类型不一致,直接判断为不全等 只有数据类型一致值一致才能判定为全等

    console.log(1 == '1');          //true
    console.log(1 === '1');         //false
    
  • 字符串比较大小的规则:

    1. 字符串之间比较大小,逐个字符进行比较,如果第一位字符大,整个字符串都大
    2. 字符按照对应的unicode编码进行比较
  • null与其他数据判断相等和不相等(特殊):

    和其它类型数据比较没有转成number

    console.log(null == undefined); //true
    console.log(null == 0);         //false
    console.log(null == '');        //false
    console.log(null == false);     //false
    console.log(null === undefined);//false
    

3. 逻辑运算符

运算符含义操作数个数操作数类型要求表达式值的类型有无副作用
&&逻辑与2boolean两个操作数中的一个
||逻辑或2boolean两个操作数中的一个
!逻辑非1booleanboolean
  • 逻辑与运算符&&组成的表达式的值:

    1. 如果第一个操作数成立,取第二个操作数作为表达式的值。
    2. 如果第一个操作数不成立,取第一个操作数作为表达式的值,第二个操作数不会被执行。

    image.png

    console.log(1 && 2);        //2
    console.log(undefined && 2);//undefined
    console.log(1 && undefined);//undefined
    console.log('' && 3);       //''
    console.log(true && false); //false
    
  • 逻辑或运算符||组成的表达式的值:

    1. 如果第一个操作数成立,取第一个操作数作为表达式的值,第二个操作数不会被执行
    2. 如果第一个操作数不成立,取第二个操作数作为表达式的值

    image.png

    console.log(1 || 2);        //1
    console.log(undefined || 2);//2
    console.log(1 || undefined);//1
    console.log('' || 3);       //3
    console.log(true || false); //true
    
  • 逻辑非

    不管操作数是什么,一定是boolean,且没有副作用

    console.log(!true);     //false
    console.log(!100);      //false
    console.log(!NaN);       //true
    console.log(!'');       //true
    console.log(!'a');      //false
    console.log(!undefined);//true
    console.log(!null);//true
    

4. 位运算符

运算符含义操作数个数表达式值的类型有无副作用
&按位与运算符2interger
|按位或运算符2interger

5. 赋值运算符

运算符含义操作数个数操作数类型要求组成的表达式的值的类型有无副作用
=赋值2任意可能
+=相加赋值2任意可能
-=相减赋值2任意可能
*=相减赋值2任意可能
/=相减赋值2任意可能
%=相减赋值2任意可能
+=相减赋值2任意可能
  1. 赋值运算符会对左边的运算符产生副作用
  2. 被副作用的操作数必须是变量的形式,没有被副作用的操作数可以是任意形式
  3. 赋值运算符组成的表达式的值:左边操作数被重新赋值之后的结果作为表达式的值
var a = 1;
a += 2;  //a = a + 2
console.log(a);  //3

6. 其他运算符

运算符含义操作数个数操作数类型要求组成的表达式的值的类型有无副作用
typeof类型判断1string
,逗号运算符2第二个操作数作为表达式的值
+字符串连接符2stringstring
? :比较判断3第一个操作要求boolean从第二个操作数和第三
  • +什么时候是 加号、字符串连接符或者正号?

    1. 如果只有一个操作符,表示正号
    2. 如果两个操作数,其中只要有一个是string,+表示字符串连接符
    3. 如果两个操作数,都不是string,表示相加
  • 条件运算符组成的表达式的取值规则:

    操作数1 ? 操作数2 : 操作数3

    1. 如果操作数1成立,取操作数2作为表达式的值,操作数3不会被执行到
    2. 如果操作数1不成立,取操作数3作为表达式的值,操作数2不会被执行到

四、 运算符优先级

  1. 一元运算符优先级最高
  2. 算数运算符 乘除取余 > 加减、字符串连接
  3. 关系运算符 比大小 > 判等
  4. 逻辑运算符 && > ||
  5. 三元运算符 ? :
  6. 赋值运算符
  7. 逗号运算符