js运算符

179 阅读8分钟

1.算数运算符

算数运算符包含+ - * / %(取余若a<b则余数为a 例console.log(3 % 5); // 3)

注意要点:

1.在算数运算中 
true false 为1 0  null 为 0  undefined为 NAN 
2.字符串与数字运算时 除了相加+外,得到的值的数据类型均为数字类型
当字符串内有非数字时,除了相加+,得到的值均为NAN
3.记住浮点数超过的位数截取之后不影响它和整型的计算(0.1 +1=1.1 不是1.10000000000021780000348)
4.当字符串使用- *  / % 若字符串内只有数值 则将其转换为数字类型 若字符串内有非数字的,则直接为NAN

在编程语言里面进行计算,是要先将十进制的转换为二进制 二进制 + 二进制 = 二进制 => 十进制!!! 在javascript中最大值的存储位数为53位 需要将多余的位数进行截取,截取之后才能进行二进制相加

<script>
    //算数运算符包含+ - * / %(取余(若a<b则余数为a 例console.log(3 % 5); // 3)
    // 在运算中 true false 为1 0 null 为 0  undefined为 NAN 无论是与数字还是与字符串
    // 字符串与boolean null 除了相加外得到的值的数据类型均为 数字类型的
    // 记住浮点数超过的位数截取之后不影响它和整型的计算(0.1 +1=1.1 不是1.10000000000021780000348)
    // 当字符串使用- *  / % 若字符串内只有数值 则将其转换为数字类型 若字符串内有非数字的,则直接为NAN 
    //数字与数字
    console.log(1+1);//2
    console.log(1-1);//0
    console.log(1 * 1);//1
    console.log(1 / 1);//1
    console.log(4 % 2); // 0
    console.log(5 % 2); // 1
    console.log(3 % 5); // 3
    //数字与字符串
    console.log(3 + "3");//6不过此类型为字符串
    console.log(3 -"3");//0
    console.log(3 *"3");//9
    console.log(3 /"3");//1
    console.log(3 %"3");//0
    //数字与boolean null undefined
    console.log(8 + true);// 9
    console.log(8 - true);// 7
    console.log(8+ null);// 8
    console.log( 8 + undefined);// NAN
    console.log(0.1 +true)//1.1 ?
    // 字符串与boolean null
    console.log("8" -true);//7
    console.log("你好" -true);//NAN
    console.log("8" -null);// 8
    console.log ("10 你好" -5);//NAN
    //浮点数相加(非常重要 面试99%会考)
    //实际运算结果比自己预估值要大一些?为什么?
    var num1 =0.1;
    var num2 =0.2;
    console.log(num1 +num2);//0.30000000000000004为什么不是3呢
    // 在编程语言里面进行计算,是要先将0.1 二进制 0.2 二进制
    // 二进制 + 二进制 = 二进制 => 十进制!!!
    // 在javascript中最大值的存储位数为53位,

    //此含义是将num1 num2转换为二进制 并且以字符串的形式出现
    var str1 = num1.toString(2);
    var str2 = num2.toString(2);
    console.log(str1);//0.0001100110011001100110011001100110011001100110011001101
    console.log(str2);//0.001100110011001100110011001100110011001100110011001101

    //查看str1 str2的存储位数
    console.log(str1.length);//57
    console.log(str2.length);//56
    // 57 56 均大于在javascript中最大值的存储位数为53位 
     // 需要将多余的位数进行截取,截取之后才能进行二进制相加
     //所以 console.log(num1 +num2);为0.30000000000000004而不是3 
    </script>

2表达式

由数字、运算符、变量等能够求得数值
<script>
        // 表达式 是由数字、运算符、变量等能够求得数值
        console.log(1+1)
        var num = 1 + 1;
</script>

3.递增递减运算符

有:num++  num--  ++num  --num
num++ ++num 意思均为 num=num+1 
区别就是 ++num先进行计算++,然后再赋值。num++,先赋值再进行++
num-- --num 意思均为 num=num-1 
区别就是 --num先进行计算--,然后再赋值。num--,先赋值再进行--
 <script>
        // 递增递减运算符有:num++  num--  ++num  --num
        // num++ ++num 意思均为 num=num+1 区别就是 ++num先进行计算++,然后再赋值。num++,先赋值再进行++
        var num1=10;
        var num2= 10;
        var num3=10
        console.log(num1++ + 1 );//10
        console.log(++num2 + 1);//11
        // num-- --num 意思均为 num=num-1 区别就是 --num先进行计算--,然后再赋值。num--,先赋值再进行--
        var age1= 10;
        var age2= 10;
        console.log(age1-- + 1);// 11
        console.log(--age2 + 1);// 10
</script>

4比较运算符

比较运算符有 > < >= <=  ==(等于)!=(不等于) === !==
比较运算符分两种 
1.关系运算符 > <  >= <=  
2.相等运算符== != === !==
===(=== 三个等于号,不仅要判断数值,而且要判断数据类型!!!)
!==(与===相反 )
<script>
        //比较运算符有 > < >= <=  ==(等于)!=(不等于) === !==
        //比较运算符分两种 1.关系运算符 > < = 2.相等运算符== != === !==
        //===(=== 三个等于号,不仅要判断数值,而且要判断数据类型!!!)
        //!==(与===相反 )
        console.log(3>5);//自己预估值 false
        console.log("3">5);//自己预估值 false
        console.log(3<5);//自己预估值 true
        console.log("3"<5);//自己预估值 true
        console.log(3>=5);//自己预估值 false
        console.log(3<=5);//自己预估值true
        console.log(3==5);//自己预估值 false
        console.log("林志玲" == "凤姐");//自己预估值false
        console.log("林志玲" == "林志玲");//自己预估值true
        console.log(3!=5);//自己预估值true
        console.log(3===5);//自己预估值false
        console.log(5===5);//自己预估值true
        console.log("5"===5);//自己预估值false
        console.log(3!==5);//自己预估值true
        console.log(5!==5);//自己预估值false
        console.log("5"!==5);//自己预估值true  预估均为正确
    </script>

5逻辑运算符

逻辑运算符 包括 1.&&  2. ||  3. ! 
1.&& 并且 and(同true为true 有false为false)
如果想要整体打印出true, &&两边都要为true,如果有一边为false,那么打印出来就是false.
2. || 或者 or(有true为true 同false为false)
如果想要整体打印出true,||两边只要有一个为true就打印true,如果两个都为false
3. ! 非 not
 <script>
         // 1.&& 并且 and
         // 如果想要整体打印出true,&&两边都要为true,如果有一边为false,那么打印出来就是false
         console.log(5>4 && 2<4);// true
         console.log(5>4 && 5<4);//false
         console.log(5<4 && 2>4);//false
         console.log(5>"3"&& 2<4);//true
        // 2. || 或者 or , 如果想要整体打印出true,|| 两边只要有一个为true就打印true,如果两个都为false,
        // false
        console.log(3 > 5 || 3 > 6); //false
        console.log(3 < 5 || 3 < 10); // true
        console.log(3 > 5 || 3 < 10); // true
        // 3. ! 非 not
        console.log(!(3 > 5));//true
    </script>

6.逻辑运算符(短路)

看数值转化为boolean 为true false 
1. 数字 && 数字 数字 && 字符串
2. 数字 || 数字 数字||字符串
1)逻辑与&&(反假不返真) 
如果表达式1结果为真,则返回表达式2 
如果表达式1结果为假,则返回表达式1
2)逻辑或||的短路运算
如果表达式1为真,则直接返回表达式1
如果表达式1为假,则返回表达式2
<script>
        //看数值转化为boolean 为true false 
        // 1. 数字 && 数字 数字 && 字符串
        // 2. 数字 || 数字
        // 1)逻辑与&& 如果表达式1结果为真,则返回表达式2
        // 如果表达式1结果为假,则返回表达式1
        console.log(10 &&100 );// 100
        console.log(0 && 100);// 0
        var nul =null;
        console.log(nul && 100)// null
        console.log("24" && 100 );// 100
        
        // 2)逻辑或||的短路运算
        // 如果表达式1为真,则直接返回表达式1
        // 如果表达式1为假,则返回表达式2
        console.log(10 ||100 );// 10
        console.log(0 || 100);// 100
        console.log(null || 100)// 100
        console.log("24"||100);//24 字符串类
        //3.综合运用
        console.log(10&&100||5);//100
        console.log(10&&0||5)//5
        console.log(10&&0||9||5)//9
        console.log(10&&100&&null)//5
        console.log(10&&0||null||null)//null
    </script>

7.赋值运算符

+=  -= *= /= %=
<script>
        // +=  -= *= /= %=
        var num=10
        num += 5;// num = mum + 5
        num -= 1; // num = num -1;
        num *= 5; // num = num * 5;
        num /= 1; // num = num / 1;
</script>

8.运算符优先级

1.括号();
2.一级运算符 ++ -- !
3.算数运算符 + - * / % 
4.关系运算符 > <  <= >=
5.相等运算符== != === !==
6.逻辑运算符 && || 先 && 后 ||
7.赋值运算符 +=  -= *= /= %=

不常用的运算符

按位运算符

按位运算符:1.左移 << 位数   右移 >> 位数    2.  &  |
1.左移 << 位数   右移 >> 位数
转换为二进制 然后向左或向右移动 再转换为10进制
例如 1的二进制 0000 0001 向左移动两位 0000 0100 值为4
2.& 的意思就是如果都为1则为1,如果有一个不为1,则为0
  |的意思就是如果都为0则为0,如果有一个不为0,则为1
<script>
        // << 位数   >> 位数
        //转换为二进制 然后向左或向右移动 再转换为10进制
        // 例如 1的二进制 0000 0001 向左移动两位 0000 0100 值为4
        var num1 = 1;
        // <<左移两位
        var num2 = num1 << 2;
        console.log(num2);// 4
        // >>右移两位
        var num3 = num2 >> 1;
        console.log(num3);//2
        // & |
        var num4 = 10 ;
        //00001010
        var num5 = 20;
        //00010100 
        //& 的意思就是如果都为1则为1,如果有一个不为1,则为0
        var num6 = num4&num5;
        //00000000
        console.log(num6);//0
        // | 的意思就是如果都为0则为0,如果有一个不为0,则为1
        var num7 = num4|num5;
        //00011110
        console.log(num7);//30
    </script>