表达式和运算符详解

发布时间:2020-07-12 00:33:33 作者:熊孩子CEO
来源:网络 阅读:494

表达式

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

例如:5 //数字字面量

“xiongbao”//字符串字面量

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

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

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

合并简单表示创建复杂表示是

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

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

box>8  逻辑运算表达式

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一样

乘赋值(*=)

除赋值(/=)

加赋值(+=)

减赋值(-=)


推荐阅读:
  1. [Python] 运算符与表达式
  2. JavaScript 精粹 基础 进阶(2)表达式和运算符

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

表达式 运算符 算符

上一篇:无法访问xxx指向的web服务器,请检查网络设置

下一篇:大数据实时计算引擎 Flink 实战与性能优化

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》