赋值运算符,自增自减运算符和关系运算符

 

1.什么是赋值运算符?

赋值运算符就是将赋值号(看着像等号的符号,下同)右边的值存储到赋值号左边的变量(的存储空间)中。

 

-赋值运算符分为两种:

  • 简单类型的赋值运算符 =

  • 复杂类型的赋值运算符 += -= *= /= %=

 

-赋值运算符的结合性和优先级:

赋值运算符的结合性是右结合性(从右至左计算)。

//因为赋值运算符的结合性是右结合性,所以会先将3赋值给num2,
//然后再将num2中的值赋值给num1.
     let num1,num2;
     num1=num2=3;
​

 

赋值运算符优先级低于算术运算符

   //因为算术运算符的优先级高于赋值运算符,所以会先计算1+2.然后再赋值给res
   //其余的同理
     let res=1+2;
​

 

-赋值运算符的左边只能放变量,不能放置常量。

  • 因为赋值符右边的值会赋值给左边的变量,变量是可以存储数据的,因为声明变量的时候给与了变量存储的空间。

  • 而常量是不能被改变的,不能存储数据。

  • 简单形容一下常量(个人的理解,可能不全面),比如苹果,苹果一开始就是苹果,无论外界的条件如何变化,苹果还是苹果。

  • 是不能被改变的,是定死的,不可能苹果长着长着就变成了香梨。道理是一样的。

 

-复杂类型的赋值运算符 += -= *= /= %=

简单的介绍:

首先将赋值号左边的值取出来和赋值号右边进行指定的运算,运算结束后再将运算结果重新存储到赋值号的左边。

    var msg=2;
     msg+=3;//相当于msg=msg+3
     console.log(msg);//5
​
//其他的 同理

 

 

2.自增自减运算符

-自增运算符:++ 可以快速的对一个变量中保存的数据进行+1的操作

-自减运算符:-- 可以快速的对一个变量中保存的数据进行-1的操作

 

-自增和自减写在变量的前面和后面到底有什么区别?

  • 写在变量的后面,表示变量先参与其它的运算,然后再自增或自减

  • 写在变量的前面,表示变量先自增或自减,然后再参与其它的运算

//声明一个变量,命名为num ,将3赋值给num   
    var num=3;
//num进行自增操作
    num++;//相当于num=num+1
    console.log(num);//4
​
//自增写在变量的前面和后面的区别:
    var num=1;
// num为1, 因为++写在变量后面, 所以num先进行其它运算,然后自增 ,此时num为2。
    var msg=num++ +1;//var msg=1 + 1;num++; 此时num的值为2
     console.log(msg);//控制台输出为2
// 代码遵从的是从上到下的顺序执行,此时num为2。 
//因为++写在变量前面, 所以num先自增, num为3,然后再进行其它运算。
    var msg1= ++num +1;//num++;num为3。然后msg=3+1;
    console.log(msg1);//4
​
//自增和自减的用法是一模一样的。唯一不同的就是样子不一样。

 

▲注意点:自增和自减运算符只能出现在变量的前面或者后面,不可以出现在常量或表达式的前面或后面。

-什么是表达式?

表达式就是使用运算符连接在一起的有意义的有结果的语句。

例如:1+1=2;2*6=12;等等之类的。

 

自增和自减的写法:

//不推荐的写法
            num=1;
            var msg=num++ +1;//var msg=num + 1;num++; 此时num的值为2
            console.log(msg);//2
//推荐写法,提高代码的阅读性 ,方便理解。
            var msg=num+1;
            num++;
            console.log(msg);//3

 

 

3.什么是关系运算符?

小于号(<)

大于号( >)

小于等于( <=)

大于等于( >=)

不等于( !=)

全等于-数值和数据类型相等( ===)

等等于-数值相等,数据类型不相等(==)

不等等于-数值不相等,数据类型不相等( !==)

 

符号 判断取值
== 只会判断取值是否相等,不会判断数据类型是否相等
!== 会同时判断取值和数据类型
!= 只会判断取值是否相等
=== 不仅会判断取值是否相等,还会判断数据类型是否相等(会同时判断取值和数据类型)

 

-关系运算符的返回值:

  • 只有两个值,要么是true ,要么是false

  • 如果关系成立,就返回true

  • 如果关系不成立,就返回false

 

-注意点:

对于非数值类型的数据,首先会转换为数值类型,然后再进行相应的运算。

       var num=2>true;//var num=2>1;   
       console.log(num);//true
//    同理
       var num=2>false;//var num=2>0; 返回true
       var num=2>null;//var num=2>0; 返回true
       var num=2>'2';//var num=2>2; 返回false

 

对于关系运算符来说,任何的数据和NaN进行运算比较,返回值都是false

      var num=88>NaN;
      console.log(num);//false
      var num=88>undefined;//相当于var num=88>NaN;
      console.log(num);//false

 

-扩展:

假如参与运算比较的都是字符串类型,那么就不会转换为数值类型来进行比较了,而是直接比较字符相对应的Unicode编码。

    var msg ='a'>'b';//var msg =0061>0062 返回false
    //如果字符串中有多个字符,那么会从左至右的依次进行比较,直到条件不满足为止。
    var msg='ab'>'ac';

 

-其他

//    杂记
        let msg =null==0;//false;
        let msg=undefined==0;//false;
        let msg=null==undefined;//true   undefined 是null衍生出来的。
//是由底层代码所决定的  
        //在企业开发中一定不要通过==来判断某一个数据是否是NaN   是不可取的,不明智的。
        let msg=NaN==NaN;
        // 如果想要判断某一个数据是否是NaN可以通过isNaN()方法来进行判断  
		//判断如果是NaN则返回true,不是就返回false。
        let num=NaN;
        let msg=isNaN(num);
        console.log(msg);//true
        

 

 

-关系运算符结合性和优先级

注意:正是因为关系运算符是左结合性(从左至右运算),所以不能使用关系运算符来判断区间

// 以下的代码是不成立的
       var msg=2<=8<=6;//var msg=true<=6;var msg=1<=6; 返回true

 

关系运算符中(< > <= >=)的优先级高于(== != !== ===)

//可以很好的证明
var msg =5==5>0;// var msg =5==true; var msg =5==1; 返回false

你可能感兴趣的:(javascript)