表达式和运算符详解

表达式

表达式是ECMAscript中的一个‘短语’,解释器会经过计算把它转化成一个值,最简单的表达式是字面量或者变量名。java

例如:5 //数字字面量数组

“xiongbao”//字符串字面量app

{x1,y2}对象字面量,对象表达式ide

[1,2,3]数组字面量,数组表达式函数

funciton(N)(return x+y) 函数字面量,函数表达式编码

合并简单表示建立复杂表示是spa

box+5  //加法运算符表达式orm

typeof(box)查看数据类型的表达式对象

box>8  逻辑运算表达式ip

1 一元运算符

(1)递增++和递减 - -

   var  box = 100;

         ++box             //box = box + 1 ;

          box++               //box= box +1 ;

(2) 前置和后置的区别

      前置 运算先累加或者累减再赋值;

      后置  先赋值再累加或者累减

          var box = 100;

          var age = box++              //box = 100+1  赋值给age

          var  age = ++box             // age = box;而后box+1;

 (3)其余类型运用一元运算符

     字符串类型

   A:  var box = “89”;

              box++                  // 对于数字字符串  有隐形的转换功能,自动转化成数字类型

  B:var box = “ab”;

             box++                  // 字符串包含非数字值转换为NaN

     布尔类型

       var box =false;

              box++                  //false转换成数值是0,累加1 结果为1;

      对象类型

        var box = {

                     toString:function(){ return}

             };

         box++                  //结果为1  不执行toString()或者value() 方法为NaN

(4)一元加减运算符

1.用于类型转换

2.用于算术运算

3.加法用于取整,减法用于取负。

var box = 1;

-box ;

+box;

2.算术运算符

ECMAscript定义了五个算术运算符,加(+)减(-)乘(*)除(/)求模(取余)。

若是在算术运算的值很多数值,那么后台会自动调用number()函数将其转化成数值。

(1) 加法

a若是都是数值

var  box = 1+2;                        //结果为3   

var  box = 1+NaN                      //结果为NaN   只要一个数值是NaN 就为NaN

var box = Infinity 加 Infinity          //结果为 Infinity

var box = -Infinity 加 - Infinity    //结果为 -Infinity

var box = Infinity 加 -Infinity      // 结果为 NaN  正无穷和负无穷为非负数

var box = +0 加 +0 ;              //  结果为+0

var box = -0 加 -0 ;              //  结果为-0

var box = +0 加 -0 ;              //  结果为+0

b若是一个操做数是字符串

b1: 若是两个数都是字符串,则讲两个字符串拼接起来

var  box = a + b ;              // 结果是ab

b2:若是只有一个是字符串,则将不是的字符串变成字符串,再拼接起来

var box = 7 + “9”;           // 结果是79

c 若是操做数 是对象和布尔值

调用他们的toString()得到相应的字符串值,再利用相关的字符串值

D 若是是undefined 和 null

则调用string()函数并取得字符串“undefined”和“null”。

(2) 减法

a若是都是数值

var  box = 1+2;                        //结果为3  若是两个操做符都是数值,则执行常规的算术减法操做并返回结果。

var  box = 1-NaN                      //结果为NaN  若是一个操做符是NaN 就为NaN

var box = Infinity 减 Infinity          //结果为 NaN

var box = -Infinity减 - Infinity    //结果为NaN

var box = Infinity 减 -Infinity      // 结果为Infinity

var box =- Infinity 减 Infinity      // 结果为-Infinity

var box = +0 减+0 ;              //  结果为+0

var box = +0 减 -0 ;              //  结果为-0

var box = -0 加 -0 ;              //  结果为+0

b若是一个操做数是字符串,布尔值,Null或者undefined

先在后台调用number()函数将其转化为数值,而后再根据前面规则执行减法计算。若是转换的结果是NaN,则减法的结果就是NaN。

c 若是一个操做数是对象

则调用对象的valueOf()方法以取得该对象的数值。

若是获得的结果是NaN,则减法的结果就是NaN。

若是对象没有valueOf()方法,则调用toString()方法并将获得的字符串转化为数值。

(3) 乘法 符合(*)

var  box = 10*70;                        //结果为700

var  box = 1*NaN                      //结果为NaN   若是一个操做符是NaN 就为NaN

var box = Infinity * Infinity          //结果为 Infinify

var box = -Infinity*- Infinity    //结果为Infinify

var box = Infinity * -Infinity      // 结果为-Infinity

var box = 10*true;              //  结果为100,true转成数值为1

var box = 10* “ ”;              //  结果为0  “ ”转成了0

var box = 10*null;              //  结果为0  null转成了0

var box = 10*“lee”;          //  结果为NaN  lee转成了NaN

var box = 10* 对象;          //  结果为NaN  

小结

a若是操做数都是数值,执行常规的乘法计算,俩个正数或者两个负数相乘结果为正数,若是有一个操做符有符合,结果为负数。若是超过ECMAScript的数值范围,则返回Infinity或者-Infinity。

b若是一个操做符是NaN结果就是NaN

c 若是是Infinity与0相乘,则结果是NaN;

d 若是是Infinity与非0相乘,则结果是Infinity或者-Infinity,取决于符号操做数的符合。

e 若是Infinity * Infinity,结果是Infinity。

f 若是一个操做数不是数值,则在后台调用Number() 将其转换为数值,在应用上面的规则

(4) 除法(/)

var  box = 10/7;                        //结果为1.42

var  box = 1/NaN                      //结果为NaN   若是一个操做符是NaN 就为NaN

var box = Infinity / Infinity          //结果为 NaN

var box = -Infinity/- Infinity    //结果为NaN

var box = Infinity /-Infinity      // 结果为NaN

var box = 10/true;              //  结果为100,true转成数值为1

var box = 10/ “ ”;              //  结果为Infinity

var box = 10/null;              //  结果为Infinity

var box = 10/“lee”;          //  结果为NaN  lee转成了NaN

var box = 10/ 对象;          //  结果为NaN

小结

a若是操做数都是数值,执行常规的除法计算,俩个正数或者两个负数相除结果为正数,若是有一个操做符有符合,结果为负数。若是超过ECMAScript的数值范围,则返回Infinity或者-Infinity。

b若是一个操做符是NaN结果就是NaN

c 若是是Infinity被Infinity除,则结果是NaN

d 若是是零被零除,则结果是NaN

e若是是非零的有限数被零除,则结果是Infinity或者-Infinity,取决于符号操做数的符合

f若是是Infinity被任何非零数值除,则结果是Infinity或者-Infinity,取决于符号操做数的符合

f 若是Infinity * Infinity,结果是Infinity

d 若是一个操做数不是数值,则在后台调用Number() 将其转换为数值,在应用上面的规则

(5) 求模(取余%)

var  box = 10%3;                        //结果为1

var  box = 1%NaN                      //结果为NaN 

var box = Infinity %Infinity          //结果为 NaN

var box = -Infinity%- Infinity    //结果为NaN

var box = Infinity%-Infinity      // 结果为NaN

var box = 10%true;              //  结果为0

var box = 10%“ ”;              //  结果为Nan

var box = 10%null;              //  结果为NaN

var box = 10%“lee”;          //  结果为NaN

var box = 10%对象;          //  结果为NaN

小结

a若是操做数都是数值,执行常规的除法计算,返回除得的余数

b若是被除数是无穷大值而除数是有限值,结果就是NaN

c 若是被除数是有限大的数值而除数是0,则结果是NaN

d 若是Infinity被Infinity除,则结果是NaN

e若是被除数是有限大的数值而除数是无穷大的数值,则结果是被除数

f若是被除数是零,则结果是零

d 若是一个操做数不是数值,则在后台调用Number() 将其转换为数值,在应用上面的规则

3.关系运算符


用于进行比较的运算符称为关系运算符:小于(<),大于(<),小于等于(<=),大于等于(>=),相等(==),不等(!=),全等【恒等】(===),不全等【不恒等】(!==)。

var  box = 3 < 2 ;                 // 关系运算符大多返回一个布尔值

var  box = “3” >22;              // 字符串会被转化成数值,再比较

var  box = “3” >“22”;            // 若是两个都是字符串,会对第一个字符进行比较,3>2

var box  = 对象  ;                 //false;

var box = 2 > {

    toString:funtion(){

           return 1;

     }

}

var   box  = "a">"b";              //97 >98  字符编码进行比较

var  box  = "a">"B";              //97 >66  字符编码进行比较

总结:

1.俩个操做数都是数值,则数值比较

2.两个操做数都是字符串,则比较两个字符串对应的字符编码值

3.若是一个操做数是数值,则将另一个操做数转化为数值,而后进行数值比较

4.若是一个操做数是布尔值,则先将其转化成数值,而后再执行比较

5若是一个操做数是对象,则先调用valueof()方法或toString()方法,再用结果比较

相等和不相等------先转换再比较;全等和不全等------仅比较而不转换

var box = 2 == 1;                     //true 

var box = “2” == 2;                  //true       “2”会转成数值2

var box = false==0;                //true        false转成数值就是0;

var  box =“a” == “A”;              //false       转换后的编码不同

var  box = 2 =={}        ;              // false 执行toString()或 ValueOf()会改变

var box = 2 ==NaN;               //false , 只要有NaN,都是false

var box = { } == {}                     // false 比较的是他们的地址,每一个新建对象的引用地址都不一样

var age = { };

var  height = age;

var box = age ==height;      // true,应用地址同样,因此相等

var box = “2”===2;              // false   值和类型都必须相等

var  box = 2!==2;             // false  值和类型都相等了

总结

1.若是一个操做数是布尔值,则先将其转换成数值,true是1,false是0

2.若是一个操做数是字符串,则将其转成数值再比较

3.若是一个操做数的对象,则先调用valueOf()或toString()方法再返回值比较

4.不转换的状况下,null等于undefined

5.若是有一个操做符是NaN,则相等操做符返回false,不相等操做符返回true;NaN不等于NaN

6.若是两个操做数都是对象,则比较透明是不是同一个对象,若是都指向同一个对象,怎返回true,不然返回false

7.在全等和不全等的比较中,值和类型都相等,才返回true,不然返回false。换句话,在操做数不转换的状况下相等才是全等。

3.布尔运算符

逻辑操做符:非(not)、与(and)、或(or)。

逻辑非

逻辑非由一个叹号(!)表示,应用于任何类型。这个操做符有转换功能,把操做数转换成布尔值,而后再对其求反。返回结果只有真true和假false。

例子

alert(!false)  ;          //true

alert(!“blue”);         //false

alert(!0);                //true

alert(!NaN);         //true

alert(!“”);              //true

alert(!12345);     //false

总结:

1.若是操做数是一个对象,返回false

2.若是操做数是一个非空字符串,返回false

3.若是操做数是任何非0数值(包括Infinity),返回false

4.若是操做数是一个空字符串,返回true

5.若是操做数是数值0,返回true

6.若是操做数是数值null,返回true

7.若是操做数是数值NaN,返回true

8.若是操做数是数值undefined,返回true

逻辑与

逻辑与操做符(&&)表示。逻辑与操做符,属于短路操做,若是第一个操做可以决定结果,那么就不会再对第二个操做数求值。若是第一个操做数是false,那么第二个值不管是什么,结果都是false。

var result = true && false

x == 0 && y == 0      //只有x和y都为0,才会返回true.

逻辑与操做适应任何类型的操做数,不只是布尔操做。

规则以下

1.若是第一个操做数是对象,责返回第二个操做数

3.若是第二个操做数是对象,则只有在第一个数的数值结果为true的状况下才会返回该对象

4.若是俩个操做数都是对象,则返回第二个操做数

5.若是第一个操做数是null,则返回null

6.若是第一个操做数是NaN,则返回NaN

7.若是第一个操做数是undefined,则返回undefined

注意:不能在逻辑与操做中实用未定义的值,会报错

逻辑或

逻辑或操做符由(||)表示。逻辑或操做符也是短路操做符,若是第一个操做数的求值结果为true,就不会对第二个操做数求值了,俩个操做数都为false,才会返回false.

若是有一个操做数不是布尔值,逻辑或不必定返回布尔值。

规则以下:

1.若是第一个数是对象,则返回第一个操做数

2.若是第一个操做数的求值结果为false,则返回第二个操做数

3.若是两个操做数都是对象,则返回第一个操做数

4.若是俩个操做数都是null,则返回null

5.若是俩个操做数都是NaN,则返回NaN

6.若是俩个操做数都是undefined,则返回undefined

条件运算符

javaScript惟一一个三元运算符,写成“?:”。

例如:x > 0 ? x : -x              //求x的绝对值

解释:若是x大于0,返回x;若是x小于0,则返回-x。

var max = (num1 > num2) ? num1:num2

赋值操做符

简单的复制操做符(=)

复合赋值操做符

num += 10和 num = num+10同样

乘赋值(*=)

除赋值(/=)

加赋值(+=)

减赋值(-=)

相关文章
相关标签/搜索