表达式和运算符详解-创新互联

表达式

表达式是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一样

乘赋值(*=)

除赋值(/=)

加赋值(+=)

减赋值(-=)

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:表达式和运算符详解-创新互联
网页网址:http://azwzsj.com/article/ghojj.html