《JavaScript高级程序设计》学习笔记(第三章)- 中

操作符

ECMAScript的操作符与其它语言都是类似的,它的特别之处在于,操作符不但可以使用于数字,还可以对其它类型的值使用,所以有很多必须要注意的转换规则,不过这些规则也不需要强记,只要在有需要的时候参考就行了。

一元操作符

递增、递减操作符

递增和递减操作符直接借鉴于C,所以使用方法也是一致的。但是,ECMAScript的递增、递减操作符可以操作任何类型的值,在对非数值类型的值使用递增、递减操作时,会先将其转换为数值,再进行增减的操作。

    var s1 = "2";
    var s2 = "z";
    var b = false;
    var f = 1.1;
    var o = {
        valueOf: function() {
            return -1;
        }
    };
    s1++; // 值变成数值 3
    s2++; // 值变成 NaN
    b++; // 值变成数值 1
    f--; // 值变成 0.10000000000000009(由于浮点舍入错误所致)
    o--; // 值变成数值-2

一元加、减操作符

这两个操作符就是我们所熟悉的正号与负号,使用方法与数学上是完全一致的。

一元加号放在数值前不会对数值有任何影响,但是对非数值使用,则相当于对这个数值使用Number()函数进行转换:

    // 变量定义与上面一致
    s1 = +s1; // 值变成数值 1
    s2 = +s2; // 值变成数值 1.1
    s3 = +s3; // 值变成 NaN
    b = +b; // 值变成数值 0
    f = +f; // 值未变,仍然是 1.1
    o = +o; // 值变成数值-1

一元减号对数值进行操作时会将其变成负数,如果对非数值使用,则先对其使用与一元加号相同的转换,再将得到的结果转成负数。

位操作符

在ECMAScript当中,位操作符使用的情景比较少,所以这里不做详细记录。如有需要再作补充。

布尔操作符

布尔操作符一共有三个:与(AND)、或(OR)和非(NOT)。

逻辑非

逻辑非操作符由一个叹号(!)表示,逻辑非会先将其操作数变成一个布尔值,然后再对其求反。

    alert(!false); // true
    alert(!"blue"); // false
    alert(!0); // true
    alert(!NaN); // true
    alert(!""); // true
    alert(!12345); // false

如果对同一个操作数使用两次逻辑非,可以得到这个值对应的布尔值,与对其使用Boolean()函数进行转换的效果一致。

逻辑与

逻辑与的操作符为(&&),只有两个操作数都为true, 逻辑与操作才返回true。逻辑与可以应用于任何类型的操作数,而不仅仅是布尔值。在其中一个操作数不为布尔值的情况下,操作结果就不一定为布尔值。
逻辑与操作属于短路求值,即如果第一个操作数能决定结果,则其不会对第二个操作数进行求值。对逻辑与操作来说,如果第一个操作数的结果为false,则其操作结果就为false,不会对第二个操作数进行求值。

    var found = true;
    var result = (found && someUndefinedVariable); // 这里会发生错误
    alert(result); // 这一行不会执行

    var found = false;
    var result = (found && someUndefinedVariable); // 不会发生错误
    alert(result); // 会执行("false")

逻辑或

逻辑或的操作符为(||),只有两个操作数都为false,逻辑或才返回false。逻辑或与逻辑与的使用方法类似,同样也为短路求值操作。不同之处在于,如果逻辑或的第一个操作数返回的是true,则操作结果为true,不会对第二个操作数进行运算。

乘性操作

乘性操作包括乘法、除法和取模。这三个操作符的使用方法与数学上的使用方法是一致的,但是同样的,这三个操作符不单单可以使用在数值类型上,如果是对非数值类型使用了这些操作,则会先使用Number()函数进行转化后再进行数值运算。

加性操作

加性操作包括加法与减法。同乘性操作,加性操作在对非数值进行运算时,也会先对非数值行进行转换。

需要注意的是,进行加法操作时,如果其中一个操作数为字符串,则进行的不是普通的加法操作,而是字符串的拼接。如果另外一个操作数不为字符串,则会将其转换成字符串再时行拼接。

    var result2 = 5 + "5"; // 一个数值和一个字符串相加
    alert(result2); // "55"

关系操作符

关系操作符包括大于(>)、小于(<)、大于等于(>=)和小于等于(<=),这几个操作符都会返回一个布尔值。

需要注意的是,如果是两个字符串进行比较,则比较的是字符串对应的字符编码值。
如果其中一个为数值,则会先将另一个转换为数值再进行比较。并且,任何一个数与NaN进行比较都会返回false

相等操作符

ECMAScript当中有两组相等操作符:相等和不相等、全等和不全等。

相等和不相等

ECMAScript中的相等操作符由两个等号组成(==),如果两个数相等则返回true。不相等符号由一个叹号跟一个等号组成(!=),如果两个数不相等则返回true

这两个操作符在进行相等判定前,都会对操作数进行转换,使其变为同一种类型再进行判断。

全等和不全等

全等操作符由三个等号组成(=),不全等符号由一个叹号跟两个等号组成(!)。

除了在比较之前不对操作数进行转换之外,这两个操作符与上面的两个操作符没有什么区别。由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整
性,建议使用全等和不全等操作符。

    var result1 = ("55" == 55); //true,因为转换后相等
    var result2 = ("55" === 55); //false,因为不同的数据类型不相等

    var result1 = ("55" != 55); //false,因为转换后相等
    var result2 = ("55" !== 55); //true,因为不同的数据类型不相等

条件操作符

条件操作符,即三目运算符。其语法形式为:

    variable = boolean_expression ? true_value : false_value;

如果表达式的求值结果为真,则取的是true_value,如果其结果为假,则取的是false_value

赋值操作符

简单的赋值操作符由一个等号表示(=),其作用就是把右边的操作数赋值给左边的变量。

在赋值号前加上乘性操作符,加性操作符或位操作符,就能构成复合赋值操作符。复合赋值操作主要用来对下面常规表达式进行简写:

    var num = 10;
    num = num + 10;

    // 复合赋值操作
    var num = 10;
    num += 10;

逗号操作符

使用逗号操作符可以在一条语句中执行多个操作:

    var num1 = 1, num2 = 2, num3 = 3;

除此之外,逗号操作符的使用之处也不是很多,也不再赘述。

posted @ 2014-11-14 22:58  buginux  阅读(364)  评论(5编辑  收藏  举报