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;
    

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

  • 相关阅读:
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 13—Clustering 聚类
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机
    【原】机器学习公开课 目录(课程笔记、测验习题答案、编程作业源码)...持续更新...
    【原】Coursera—Andrew Ng机器学习—Week 11 习题—Photo OCR
    【原】Coursera—Andrew Ng机器学习—Week 10 习题—大规模机器学习
    【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测
    【原】Coursera—Andrew Ng机器学习—Week 8 习题—聚类 和 降维
    【原】Coursera—Andrew Ng机器学习—Week 7 习题—支持向量机SVM
  • 原文地址:https://www.cnblogs.com/buginux/p/4098358.html
Copyright © 2011-2022 走看看