天天看点

《JavaScript高级程序设计 (第3版)》学习笔记4:chapter_3 - 3 operator

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>operator</title>
    <script>
        /*
        ECMAScript操作符能够应用到字符串、数字值、布尔值和对象(与其他编程语言的区别)
            应用于字符串、布尔值和对象时,会按照特定的规则先进行转换
            应用于对象时,相应的操作符通常都会调用对象的valueOf()或toString()方法,以便取得可以操作的值

        一元操作符:只能操作一个值的操作符
            1,递减和递增操作符
                前置递增和前置递减(计算机科学,副效应)
                后置递增和后置递减

            2,一元加和减操作符(作用跟数学书上一致)
                var num = +12;
                var num1 = -23;



        位操作符





        布尔操作符
        不能在布尔操作符中使用未定义的变量!!!
            1,逻辑非:"!"    无论这个值是什么数据类型,这个操作符都会返回一个布尔值
                a,逻辑非操作符首先会将它的操作数转换成为一个布尔值,然后对其求反
                b,同时使用两个逻辑非操作符 == Boolean()函数作用
            2,逻辑与:"&&"  短路操作符,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值(例如false)
                如果有一个操作数不是布尔值,逻辑与不一定会返回布尔值
                    第一个操作数为对象,则返回第二个操作数
                    如果第一个操作数的求值结果为true,则返回第二个操作数
                    如果两个操作数都是对象,则返回第二个操作数
                    一个操作数是NaN --> NaN
                    一个操作数是null --> null
                    一个操作数是undefined --> undefined


            3,逻辑或:"||"  短路操作符,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值(例如true)
                如果有一个操作数不是布尔值,逻辑与不一定会返回布尔值
                    第一个操作数为对象,则返回第一个操作数
                    如果第一个操作数的求值结果为false,则返回第二个操作数
                    如果两个操作数都是对象,则返回第一个操作数
                    两个操作数都是NaN --> NaN
                    两个操作数都是null --> null
                    两个操作数都是undefined --> undefined



        乘性操作符:乘法,除法,求模
        注意点:
        乘法:
            a, 如果Infinity 与 0相乘,结果为NaN;
            b, 如果Infinity 与 非0数值相乘,结果为Infinity或-Infinity;
            c, 如果一个操作数不是数值,则在后台调用Number()将其转换成为数值,然后在计算
        除法:
            a, Infinity / Infinity, 0 / 0 --> NaN
            b, 非零的有限数 / 0, Infinity / 非零的有限数 --> Infinity or -Infinity
            c, 如果一个操作数不是数值,则在后台调用Number()将其转换成为数值,然后在计算




        加性操作符
        注意点:
        (Infinity 与 -Infinity存在抵消情况时,结果为NaN)
        加法:
            a, Infinity + (-Infinity) --> NaN;
            b, +0 + (-0) -->  +0 ;
            c, 如果有一个操作数是字符串 --> 拼接
        减法:
            a, 如果有一个操作数是字符串 --> 将对应的字符串自动转换成数值
           


        关系操作符:<, >, <=, >=
            a, 数值与字符串,布尔值,对象进行比较,将字符串、布尔值、对象转换成数值后再执行比较
            b, 两个字符串比较 --> 比较字符串对应的字符编码值


        相等操作符
            相等(==)和不相等(!=) -- 先转换在比较(强制转型)
            注意点:
                a, null == undefined --> true
                b, 比较相等性之前,不能将null 和 undefined转换成其他任何值
                    undefined == 0 --> false
                    null == 0 --> false

            全等(===)和不全等(!==) -- 仅比较而不转换
        
        因为相等和不相等操作符存在类型转换问题,为了保持代码中数据类型的完整性,建议使用“全相等”和“不全相等”操作符





        条件操作符:三元运算符
        var maxValue = (numa > numb) ? numa : numb;



        赋值操作符
            复合赋值操作



        逗号操作符
            var num1 = 1, num2 = 2, num3 = 3;
            var num = (1,2,3,8,3); // num = 3 自左向右

        
        
        */
    
    // 一元操作符
        var s1 = "2";
        var s2 = "12z";
        var b = false;
        var f = 1.4;
        var o = {
            valueOf: function(){
                return -1;
            }
        };

        
        s1 ++;
        s2 ++;
        b ++;
        f --;
        o --;
        // 先转换成数值变量,再执行加减1的操作

        // console.log(s1);
        // console.log(s2);
        // console.log(b);
        // console.log(f);
        // console.log(o);
    
        // 布尔操作符

        

        // console.log(! hhjhj);

        console.log(12 && true);
        console.log(false && 12);
        console.log((null == undefined) && 23);
        console.log(56 && 34);
        console.log('-----------');
        console.log(12 || false);
        console.log(false || 12);
        console.log((null == undefined) || 23);
        console.log(56 || 34);

        // var found1 = false;
        // var result1 = (found1 && someUndefinedValue1);  // 发生错误,修改:将found1的值改为false
        // alert(result1);

        // var found2 = true;
        // result2 = (found2 || someUndefinedValue2);
        // alert(result2);

        // 利用逻辑或的行为来避免为变量赋null或undefined值,推荐使用!!!
        // var myProject = preferredObject || backupObject;

        // 乘性操作符

            console.log(Number.POSITIVE_INFINITY * 0);  // NaN
            console.log(Number.POSITIVE_INFINITY * -23); // -Infinity
            console.log('12' * 2);
            console.log('--------------');
            console.log(Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY);
            console.log(12 / -0);
            console.log(Number.POSITIVE_INFINITY / 12);
            

        // 加性操作符
            console.log(5 + 5);
            console.log(5 + '5');
            var message = 'the sum of 5 and 10 is ' + (5 + 10);
            console.log(message);
        
            
            console.log(5 - '52');
            console.log(5 - '');
            console.log(5 - null);
            console.log(5 - undefined);
        
        // 关系操作符
            console.log('fadf'< 'dfsf'); // false
            console.log('23' < 3);  // false
            console.log('23'<'3');  // true
            console.log(NaN >= 3);  // false
            console.log(NaN < 3);  // false
            // 在与NaN进行比较时,以上的两个操作都是返回false

        // 相等操作符

        console.log('55' == 55);  // true
        console.log('55' === 55); // false 因为不同的数据类型不相等

        console.log(null == undefined);  // true 因为他们是类似的值
        console.log(null === undefined);  // false  因为他们是不同类型的值


    
    </script>

</head>
<body>


</body> 
</html>
           

让学习“上瘾”,成为更好的自己!

继续阅读