zoukankan      html  css  js  c++  java
  • 《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;
    

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

  • 相关阅读:
    简析时序数据库 InfluxDB
    tensorflow_1.x(四):线性回归问题初步(准备数据、构建模型、训练模型、进行预测)
    (二) 差分隐私直观理解
    (一) 差分隐私
    (四)PyTorch 的 torch.backends.cudnn.benchmark
    (三)PyTorch 的 Autograd
    (二)PyTorch 中的 tensor 及使用
    (一)PyTorch 中的 ModuleList 和 Sequential
    文本分类(六):不平衡文本分类,Focal Loss理论及PyTorch实现
    tensorflow_1.x(三):Tensorflow2入门(基础、张量、常量与变量、变量的赋值、计算模型、图执行模式、兼容1.0、会话、变量、占位符、feed提交数据)
  • 原文地址:https://www.cnblogs.com/buginux/p/4098358.html
Copyright © 2011-2022 走看看