购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 运算符

运算符是进行科学计算的标识符,常量、变量和运算符组成表达式,表达式是组成程序的基本部分。

2.6.1 算术运算符

JavaScript中的算术运算符用来进行整型和浮点型数据的算术运算,按照参加运算的操作数的不同可以分为一元运算符和二元运算符。

1.一元运算符

一元运算符一共有三个,即-、++和--。-a是对a取反运算,a++或a--是指表达式运算完后,再给a加1或减1。而++a或--a是先给a加1或减1,然后进行表达式运算。一元运算符说明如表2-1所示。

表2-1 一元运算符2

下面看一个一元算术运算符示例:

    var a=12;
    console.log(-a);            ①
    
    var b=a++;                 ②
    console.log(b);
    
    b=++a;                     ③
    console.log(b);

输出结果如下:

    -12
    12
    14

上述代码第①行-a是把a变量取反,结果输出是-12。第②行代码是把a++赋值给b变量,a是先赋值后++,因此输出结果是12。第③行代码是把++a赋值给b变量,a是先++后赋值,因此输出结果是14。

2.二元运算符

二元运算符包括+、-、*、/和%,这些运算符对整型和浮点型数据都有效。二元运算符说明如表2-2所示。

表2-2 二元运算符

下面看一个二元算术运算符示例:

    //声明一个整型变量
    var intResult=1 + 2;
    console.log(intResult);
    
    intResult=intResult - 1;
    console.log(intResult);
    
    intResult=intResult * 2;
    console.log(intResult);
    
    intResult=intResult / 2;
    console.log(intResult);
    
    intResult=intResult + 8;
    intResult=intResult % 7;
    console.log(intResult);
    
    console.log("-------");
    //声明一个浮点型变量
    var doubleResult=10.0;
    console.log(doubleResult);
    
    doubleResult=doubleResult - 1;
    console.log(doubleResult);
    
    doubleResult=doubleResult * 2;
    console.log(doubleResult);
    
    doubleResult=doubleResult / 2;
    console.log(doubleResult);
    
    doubleResult=doubleResult + 8;
    doubleResult=doubleResult % 7;
    console.log(doubleResult);

输出结果如下:

    3
    2
    4
    2
    3
    -------
    10.0
    9.0
    18.0
    9.0
    3.0

上述例子中分别对整型和浮点型进行二元运算,具体语句不再解释。

3.算术赋值运算符

算术赋值运算符只是一种简写,一般用于变量自身的变化。算术赋值运算符说明如表2-3所示。

表2-3 算术赋值运算符

下面看一个算术赋值运算符示例:

    var a=1;
    var b=2;
    a +=b;                         //相当于 a=a + b
    console.log(a);
    
    a +=b + 3;                     //相当于 a=a + b + 3
    console.log(a);
    a -=b;                         //相当于 a=a - b
    console.log(a);
    
    a *=b;                         //相当于 a=a*b
    console.log(a);
    
    a /=b;                        //相当于 a=a/b
    console.log(a);
    
    a %=b;                        //相当于 a=a%b
    console.log(a);

输出结果如下:

    3
    8
    6
    12
    6
    0

上述例子中分别对整型进行+=、-=、*=、/=和%=运算,具体语句不再解释。

2.6.2 关系运算符

关系运算是比较两个表达式大小关系的运算,它的结果是真(true)或假(false),即布尔型数据。如果表达式成立,则结果为“真”,否则为“假”。关系运算符有8种:==、!=、>、<、>=、<=、===和!==。关系运算符说明如表2-4所述。

表2-4 关系运算符

下面看一个关系运算符示例:

    var value1=1;
    var value2=2;
    if (value1==value2) {
            console.log("value1==value2");
    }
    
    if (value1 > !=value2) {
            console.log("value1 > !=value2");
    }
    
    if (value1 < value2) {
            console.log("value1 < value2");
    }
    
    if (value1 < value2) {
            console.log("value1 < value2");
    }
    
    if (value1 < =value2) {
            console.log("value1 < =value2");
    }
    
    var a=3;
    var b="3";             //改为3 表达式a===b为true
    if (a==b) {                                        ①
        console.log("a==b");
    }
    
    if (a===b) {                                ②
       console.log("a===b");
    }

输出结果如下:

    value1 !=value2
    value1 < value2
    value1 < =value2
    a==b

上述例子重点解释有标号行代码,其中第①行是通过“==”比较数值a和字符串b是否相等,结果是相等的。同样使用“===”比较数值a和字符串b是否相等,如第②行代码所示,结果是不等的。

2.6.3 逻辑运算符

逻辑运算符是对布尔型变量进行运算,其结果也是布尔型。逻辑运算符说明如表2-5所示。

表2-5 逻辑运算符

&&和‖都具有短路计算特点。例如:x && y,如果x为假,则不计算y(因为不论y为何值,“与”操作的结果都为假)。例如:x ‖ y,如果x为真,则不计算y(因为不论y为何值,“或”操作的结果都为真)。

所以,把&&称为短路与,‖称为短路或,就是它们在计算的过程中就像电路短路一样,采用最优化的计算方式,从而提高了效率。

为了进一步理解它们的区别,看看下面的例子:

    var i=0;
    var a=10;
    var b=9;
    
    if ((a > b) ‖ (i++==1)) {//换成 | 试一下            ①
        console.log("或运算为真");                ②
    } else {
        console.log("或运算为假");                ③
    }
    console.log("i=" + i);    ④
    
    i=0;
    if ((a < b) && (i++==1)) {//换成&试一下        ⑤
        console.log("或运算为真");                ⑥
    } else {
        console.log("或运算为假");                ⑦
    }
    console.log("i=" + i);    ⑧上述代码运行输出结果如下:     或运算为真
    i=0
    与运算为假
    i=0

上述代码运行输出结果如下:

    或运算为真
    i=0
    与运算为假
    i=0

其中,第①行代码是进行短路或计算,由于(a > b)是真,后面的表达式(i++==1)不再计算,因此结果i不会加1,第④行输出的结果为i=0。如果把第①行短路或换成逻辑或,结果则是i=1。

类似地第⑤行代码是进行短路与计算,由于(a < b)是假,后面的表达式(i++==1)不再计算,因此结果i不会加1,第⑧行输出的结果为i=0。如果把第⑤行短路与换成逻辑与,结果则是i=1。

2.6.4 位运算符

位运算是以二进位(bit)为单位进行运算的,操作数和结果都是整型数据。位运算符有如下几个:&、|、^、~、>>、>>>、<<。位运算符说明如表2-6所示。

表2-6 位运算符

为了进一步理解它们,看看下面的例子:

     var a=178;                                    //二进制10110010    
    var b=94;                                      //二进制01011110    
    
    console.log("a | b=" + (a | b));               //二进制11111110            
    console.log("a & b=" + (a & b));       //二进制00010010            
    console.log("a ^ b=" + (a ^ b));             //二进制11101100            
    console.log("~a=" + (~a)); //二进制11111111 11111111 11111111 01001101,十进制 -179①
    
    console.log("a >> 2=" + (a >> 2));                    //二进制00101100
    console.log("a >>> 2=" + (a >>> 2));            //二进制00101100
    console.log("a << 2=" + (a << 2));                    //二进制11001000
    
    var c=-12;                                                        //二进制-1100
    console.log("c >> 2=" + (c >> 2));                    //二进制-00000011
    console.log("c >>> 2=" + (c >>> 2));            //十进制1073741821            ②
    console.log("c << 2=" + (c << 2));                     //二进制-00110000

输出结果如下:

    a | b=254
    a & b=18
    a ^ b=236
    ~a=-179
    a >> 2=44
    a >>> 2=44
    a << 2=712
    c >> 2=-3
    c >>> 2=1073741821
    c << 2=-48

上述代码第①行是对a变量取反,178(32位十进制)取反后的二进制表示为11111111 11111111 11111111 01001101。二进制11111111 11111111 11111111 01001101是-179(32位十进制)补码表示。

提示 十进制负数使用二进制补码表示时,补码=反码+1,但这些计算都是二进制位运算。例如-12(32位十进制)补码表示为11111111 11111111 11111111 11110100,计算过程是12(二进制1100)取反表示为11111111 11111111 11111111 11110011,然后+1结果就是11111111 11111111 11111111 11110100。

第②行代码是-12无符号右移2位,-12的补码表示方式是11111111 11111111 11111111 11110100,无符号右移2位,高位采用0补位,结果是00111111 11111111 11111111 11111101,十进制表示为1073741821。

2.6.5 其他运算符

除了前面介绍的主要的运算符,还有其他一些运算符,它们包括:

(1)三元运算符(? :):例如,x?y:z; ,其中x、y和z都为表达式。

(2)括号:起到改变表达式运算顺序的作用,它的优先级最高。

(3)引用号(.):调用属性、函数等操作符console.log()。

(4)赋值号(=):赋值是用等号运算符(=)进行的。

(5)下标运算符[]。

(6)对象类型判断运算符instanceof。

(7)内存分配运算符new。

三元运算符示例:

    var score=80;
    var result=score > 60 ? "及格" : "不及格";
    console.log(result);

输出结果: odxSythrLhcTECWBnPVRSRbKAXQrCVTR+oiJ/LyJVnOjGpL+jDUELet3vB1jrSDO

  及格
点击中间区域
呼出菜单
上一章
目录
下一章
×