首页 > 其他 > 详细

运算符

时间:2019-08-29 19:35:07      阅读:88      评论:0      收藏:0      [点我收藏+]
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script>
        /*
        运算符也叫操作符,
        通过运算符可以对一个或多个值进行运算,并获取运算结果,
        比如 typeof 就是运算符,可以来获得一个值的类型,它会将该值的类型以字符串的形式返回。
        */
        var a = 123;

        var result = typeof a; // number
        console.log(typeof result); // string

        /*
            算数运算符,不会改变原变量,只会返回一个结果。
            当非Number类型的值,会将这些值先转换成Number类型,再进行运算。
            +
            -
            *
            /
            %
        */
        /*
            + 可以对两个值进行加法运算,并把结果返回
        */
        result = a + 1; // result = 124
        console.log(a); // 123

        result = true + 1; // 2

        result = true + false; // 1

        result = 2 + null; // 2

        // 任何值和NaN进行运算,都为NaN.
        result = 2 + NaN; // NaN

        // 如果对两个字符串进行加法,会进行拼串操作,并返回结果.
        result = "123" + "456"; // 123456
        console.log(typeof result); // string

        // 任何的值和字符串做+运算,都会先转换为字符串,然后拼串.
        result = 123 + "1"; //1231

        result = true + "hello"; // truehello

        
        // 可以将任意的数据类型转换为String,只需要为任意类型+ 一个""即可转换为String
        // 这是一种隐式的类型转换,有浏览器自动完成,实际上也是调用String()函数完成的.
        var c = 123;
        c = c + ''; // "123"
        console.log(typeof c);

        c = null
        c = c + ""; // "null"

        // 注意运算顺序
        result = 1 + 2 + "3";
        console.log("result =" + result); // "result = 33"

        result = "1" + 2 + 3; // "123"

        /*
        - 可以对值进行减法运算,并返回
        */

        result = 100 - 5 ;  // 95
        result = 100 - true; // 99
        // 先转换成Number类型,再进行减法运算
        result = 100 - "1"; // 99
        result = "100" - "1"; // 99

        /*
            *可以对两个值进行乘法运算
        */
        result = 2 * 2; // 4
        result = 2 * "8"; // 16
        result = "2" * "3"; // 6
        result = 2 * undefined; //NaN
        result = 2 * null ; // 0

        /*
            / 可以对两个值进行除法运算
        */
        result = 4 / 2; // 2
        result = 3 / 2; //1.5

        // 任何值做- * / 运算时都会自动转换为Number
        // 可以利用这一特点做隐式的类型转换,可以通过为一个值 -0 *1 /1 来将其转换为Number
        // 原理和Number()一样
        var d = "123"
        d = d - 0; // typeof d 为number

        /*
            % 取模运算(取余数)
        */
        result = 9 % 3; // 0

        /*
            一元运算符,只需要一个操作数
            + 正号
                - 正号不会对数值产生任何影响
            - 负号
                - 负号可以对数字进行符号的取反
            - 对于非Number类型的值,先将其转换为Number,再运算。
        */
        a = 123;

        a = +a; // 123
        a = -a; //-123

        a = -2;
        a = +a; // -2
        a = -a; // 2

        a = true;
        a = -a; // -1

        a = "18"; // typeof a => string
        a = -a; //-18 typeof a => number

        //将其他类型转换为Number,使用+
        a = "18" // typeof a => string
        a = +a; // 18 typeof a => number

        result = 1 + "2" + 3; //"123"

        // 运算符的优先级
        result = 1 + +"2" + 3; // 6

        /*
        自增++:通过自增可以使变量在自身的基础上增加1,对于一个变量自增以后,原变量的值会立即自增。
        */
        a = 1;
        a = a + 1; // 2
        // 等同于
        a++;

        ++a;
        // 自增有两种,后++(a++)和前++(++a)。
        // 无论是a++,++a,都会立即使原变量的值自增1.不同的是,a++和++a的值不同.
        // a++ 的值等于自增前的值
        // ++a 的值等于自增后的值
        a = 1;
        console.log(a++); // 1
        console.log("a = " + a); // "a = 2"

        a = 1;
        console.log(++a);  // 2
        console.log("a = " + a) // "a = 2"

        c = 10;
        c++;
        console.log(c++); // 11
        console.log(c); // 12

        var d = 20;
        console.log(++d); // 21
        console.log(++d); // 22

        // d++ 20 d 21
        // ++d 22 d 22
        result = d++ + ++d + d;
        console.log(result); //64

        d = 20;
        //d++运行之后,d是21,d++是20,20赋值给d,d为20.
        d = d++;
        // 等价于
        var e = d++;
        d = e;

        /*
            自减--
            通过自减可以使变量在自身的基础上减1
            自减分成两种,后--(a--)和前--(--a)
            无论是a--还是--a,都会立即使原变量的值自减1,不同的是a--和--a的值不同.
            a--自减前的值
            --a是自减后的值
        */
        var num = 10;
        num--;
        --num;

        /*
            JS中为我们提供了三种逻辑运算符
            !非 可以用来对一个值进行非运算,不改变原变量,所谓非运算就是对一个bool值进行取反操作。true变false。false变true。

            && 与

            || 或
        */

        a = true;
        // 对a进行非运算
        a = !a; // false
        // 如果对一个值进行两次取反,则不会变换。
        a = !!a; // true

        // 如果对一个非bool值进行非运算,则会先转换为bool值,再取反。

        b = 10; // number

        b = !b; // false  bool

        // 可以利用该特点,将其他数据类型转为bool类型。可以为任意数据类型取两次反,转换为bool类型。

        a = "hello"; // string
        a = !!a; // true boolean

        // && 与
        // 可以对符号两侧的值进行与运算并返回结果
        // 如果两个值都为true则返回true
        result = true && true; // true
        // 只要有一个false,就返回false
        result = true && false; // false
        result = false && true; // false
        result = false && false; // false
        // JS中的与属于短路与,如果第一个值为false,则不会再看第二个
        // 第一个值为true,会检查第二个
        true && alert('你看我出不出来'); //会弹框
        // 第一个值为false,不会检查第二个
        false && alert('你看我还出不出来'); // 不会弹框

        // || 或
        // 可以对符号两侧的值进行或运算并返回结果
        // 如果两个值只要有一个true,则返回true。两个都为false,则返回false。
        // 两个都是false,则返回false.
        result = false || false; // false

        result = true || false; // true
        result = false || true; // true
        result = true || true; // true
        // JS中的或属于短路或,如果第一个值为true,则不会看第二个。
        // 第一个值为true,则不再检查第二个
        true || alert("123");
        // 第一个值为false,会检查第二个
        false || alert("123"); // 会弹框

        /*
            对于非bool值进行与或运算:
            非bool值的情况时,先将其转换为bool值,再运算,并且返回原值。
            与运算:
                如果第一个值为true,则返回第一个。
                如果第一个值为false,则直接返回第一个值。
            或运算:
                如果第一个值为true,则直接返回第一个。
                如果第一个值为false,则返回第二个。
            
        */
        // 与运算,如果两个值都为true,则返回后面的
        // 与运算,如果两个值中有false,则返回false。
        // true && true
        result = 1 && 2; // 2
        result = 2 && 1; // 1
        // false && true
        result = 0 && 2; // 0
        result = 2 && 0; // 0
        // false && false
        result = NaN && 0; // NaN
        result = 0 && NaN: // 0

        // true|| true
        // 如果第一个值为true,则直接返回第一个值
        result = 1 || 2; //1
        result = 2 || 1; //2
        result = 2 || NaN;
        result = 2 || 0;

        // 如果第一个值为false,则直接返回第二个值。
        result = "" || "hello"; // "hello"
        result = -1 || "你好"; // -1

        /*
            赋值运算符
            = 可以将符号右侧的值赋值给左侧的变量
            += a += 5 等价于 a = a + 5;
            -= a -= 5 等价于 a = a - 5;
            *= a *= 5 等价于 a = a * 5;
            /= a /= 5 等价于 a = a / 5;
            %= a %= 5 等价于 a = a % 5;
        */
        a = 123; // a = 123

        a = a + 5; 
        // 等价于
        a += 5;

        a = a - 5;
        // 等价于
        a -= 5;

        /*
            关系运算符
            通过关系运算符可以比较两个值之间的大小关系
            如果关系成立,它会返回true,如果关系不成立,则返回false。
        */
        /*
            > 大于号
            - 判断符号左侧的值是否大于右侧的
            - 如果关系成立,返回true,如果关系不成立,则返回false。
        */
        result = 5 > 10; // false

        result = 5 > 4; // true

        result = 5 > 5; // false

        /*
            >= 大于等于
            - 判断符号左侧的值是否大于或等于右侧的值
            - 如果关系成立,则返回true。如果关系不成立,则返回false.
        */
        result = 5 >= 5; // true

        result = 5 >= 10; // fals

        result = 5 >= 4; // true

        /*
            <= 小于等于
        */
        result = 5 <= 10; // true

        /*
            非数值比较:
                先转换成数值,再进行比较。
                任何值和NaN进行任何比较都是NaN.
                特殊情况,如果两边都是字符串,不会将其转换为数字进行比较,而会分别比较字符串中字符的Unicode编码。
        */
        console.log(1 > true ); // false
        console.log(1 >= true); // true
        console.log(1 > "0"); // true
        console.log(10 > null); // true
        console.log(10 > 'hello'); // false
        console.log(10 <= "hello"); // false
        console.log(true > false ); // true
        console.log("1" < "5"); // true
        console.log("11" < "5"); // true
        console.log(11 < "5"); // false

        console.log("a" < "b"); // true
        console.log("a" >= "b"); // false

        // 比较字符编码时,是一位一位进行比较
        console.log("abc"< "b"); // true
        console.log("bbc" < "bb"); // false

        // 比较中文没有意义
        console.log("戒" > "我"); // true

        // 如果比较的是两个字符串型的数字,可能会得到不可预期的结果,一定要转型!!
        console.log("1111111222" > "5"); // false
        // 可改为
        console.log("1111111222" > +"5"); // true

        /*
            相等运算符用来比较两个值是否相等,如果相等会返回true,否则返回false.

            使用 == 来做相等运算.
                当使用==比较两个值时,如果值的类型不同,将转换成相同的类型,再进行比较。
        */
        a = 10;
        console.log(a == 4); // false

        console.log("1" == 1); // true

        console.log(true == "1"); // true

        console.log(true == 'hello'); // false

        console.log(null == 0); //false

        /*
            undefined 衍生自null
            所以这两个值做相等判断时,会返回true。
        */
        console.log(undefined == null); // true

        /*
            NaN 不和任何值相等,包括他本身
        */
        console.log(NaN == NaN); // false

        b = NaN;
        // 判断b的值是否是NaN
        /*
            可以通过isNaN()函数来判断一个值是否为NaN
            如果该值是NaN,则返回true,否则返回false。
        */
        console.log(isNaN(b)); // true

        /*
            != 不相等用来判断两个值是否不相等,如果不相等返回true,如果相等返回false。
            不相等也会对变量进行自动的类型转换,如果转换后相等,它也会返回false
        */
        console.log(10 != 5); //true
        console.log("abcd" != "abcd"); // false
        console.log("1" != 1);

        /*
            ===
            全等用来判断两个值是否全等,它和相等类似,不同的是它不会做自动的类型转换。
            如果两个值的类型不同,直接返回false。
        */
        console.log("123" === 123); //false

        /*
            !==
            不全等:用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换。
            如果两个值的类型不同,直接返回true。
        */
        console.log("1" !== 1); // true

        /*
            条件运算符也叫三元运算符
            语法:
                条件表达式? 语句1:语句2
            执行流程,
                条件运算符在执行时,首先对条件表达式进行求值,
                如果该值为true,则执行语句1,并返回执行结果
                如果该值为false,则执行语句2,并返回执行结果
                当返回的结果是个非bool值,会先将其转换为bool值,再进行运算。
        */
        true ? alert("语句1") : alert("语句2"); // 语句1
        a = 10;
        b = 20;
        c = 50;
        a > b ? alert('a大'): alert('b大'); // b大

        // 获取a和b中的最大值
        var max = a > b ? a : b;
        console.log("max =" + max);

        // 获取a b c 中的最大值
        max = max > c ? max : c;

        // 这种写法不推荐使用,不方便阅读
        max = a > b ? (a > c ? a : c ): (b > c ? b : c)

        "hello"? alert('语句1'): alert("语句2"); // 语句1

        ""? alert("语句1"): alert("语句2"); // 语句2

        /*
            , 运算符
            使用,可以分割多个语句,一般可以在声明多个变量时使用
        */

        // 使用 , 运算符同时声明多个变量
        // var a , b , c;

        // 可以同时声明多个变量并赋值
        // var a = 1, b = 2, c = 3;
        // alert(b);

        /*
            就和数学中一样,在JS中运算符也有优先级,
            比如: 先乘除 后加减
        */
        result = 1 + 2 * 3; // 7

        /*
            如果|| 的优先级高,或者两个一样高,则应该返回3
            如果&& 的优先级高,则应该返回1
        */
        result = 1 || 2 && 3;
        console.log(result); // 1

        /*
            可以通过()来改变优先级
        */
        rsult = (1 || 2) && 3; // 3

    </script>
</head>
<body>

</body>
</html>

运算符

原文:https://www.cnblogs.com/tumo/p/11431534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!