JavaScript表达式和操作符

表达式

表达式是程序的最小单位,不可再分割 ,在程序中随处可见 ,给计算机表达指令的一种形式就是表达式

原始表达式包含直接量、关键字(保留字)和变量名

//直接量
1;
1.02;
'hello world!';
//保留字
true;
false;
this;
//变量名
name;
hqyj;
age;

 

操作符

一元操作符

只能操作一个值的操作符叫做一元操作符。一元操作符是 ECMAScript 中最简单的操作符。

递增操作符

递增操作符直接借鉴自 C,而且有两个版本:前置型和后置型。顾名思义,前置型应该位于要操作的变量之前,而后置型则应该位于要操作的变量之后。

var age = 29;
++age;//age = age + 1

执行前置递增操作时,变量的值都是在语句被求值以前改变的。

递减操作符

递减操作符同递增操作符一样,只是加法变成了减法。

var age = 29;
--age;//age=age-1

加减运算符

加法

加法操作符(+)的用法如下所示:

var result = 1 + 2;

 

如果两个操作符都是数值,执行常规的加法计算,然后根据下列规则返回结果:

  • 如果有一个操作数是 NaN,则结果是 NaN;

  • 如果是 Infinity 加 Infinity,则结果是 Infinity;

  • 如果是-Infinity 加-Infinity,则结果是-Infinity;

  • 如果是 Infinity 加-Infinity,则结果是 NaN;// Infinity +(- Infinity )=NaN

  • 如果是+0 加+0,则结果是+0;

  • 如果是-0 加-0,则结果是-0;

  • 如果是+0 加-0,则结果是+0。//+0-0=+0

不过,如果有一个操作数是字符串,那么就要应用如下规则:

  • 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;

  • 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来;如果有一个操作数是对象、数值或布尔值,则调用它们的 toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于 undefined 和 null,则分别调用 String()函数并取得字符串"undefined"和"null"。

减法

减法操作符(-)是另一个极为常用的操作符,其用法如下所示:

var result = 2 - 1;

其需要遵循的一些特殊规则,如下所示:

  • 如果两个操作符都是数值,则执行常规的算术减法操作并返回结果;

  • 如果有一个操作数是 NaN,则结果是 NaN;

  • 如果是 Infinity 减 Infinity,则结果是 NaN;//infinity-infinity=NaN

  • 如果是-Infinity 减-Infinity,则结果是 NaN;

  • 如果是 Infinity 减-Infinity,则结果是 Infinity;

  • 如果是-Infinity 减 Infinity,则结果是-Infinity;

  • 如果是+0 减+0,则结果是+0;

  • 如果是+0 减-0,则结果是-0;//+0-(-0)=(-0)

  • 如果是-0 减-0,则结果是+0;

  • 如果有一个操作数是字符串、布尔值、 null 或 undefined,则先在后台调用 Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN,则减法的结果就是 NaN;

  • 如果有一个操作数是对象,则调用对象的 valueOf()方法以取得表示该对象的数值。如果得到的值是 NaN,则减法的结果就是 NaN。如果对象没有 valueOf()方法,则调用其 toString()方法并将得到的字符串转换为数值。

关系操作符

关系运算符用于检测两个值之间的关系,总是返回一个布尔值true或false,也称之为 布尔表达式。

比较运算符

小于(<) 、大于(>) 、小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比较,比较的规则与我们在数学课上所学的一样。这几个操作符都返回一个布尔值 。

当关系操作符的操作数使用了非数值时,会进行数据转换或完成某些奇怪的操作。以下就是相应的规则。:

  • 如果两个操作数都是数值,则执行数值比较。

  • 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。

  • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。

  • 如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf()方法,则调用 toString()方法,并用得到的结果根据前面的规则执行比较。

  • 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

在比较字符串值时,小于的意思是“在字母表中的位置靠前”,而大于则意味着“在字母表中的位置靠后”,但实际上完全不是那么回事。在比较字符串时,实际比较的是两个字符串中对应位置的每个字符的字符编码值。

相等运算符
相等和不相等

ECMAScript 中的相等操作符由两个等于号(==)表示,如果两个操作数相等,则返回 true。而不相等操作符由叹号后跟等于号(!=)表示,如果两个操作数不相等,则返回 true。这两个操作符都会先转换操作数(通常称为强制转型),然后再比较它们的相等性。

在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:

  • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为 0,而true 转换为 1;

  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;

  • 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较;

这两个操作符在进行比较时则要遵循下列规则。

  • null 和 undefined 是相等的。

  • 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值(null == 0为false)。

  • 如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则, NaN 不等于 NaN。NaN!=r任何-->

  • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false。

全等和不全等

除了在比较之前不转换操作数之外,全等和不全等操作符与相等和不相等操作符没有什么区别。全等操作符由 3 个等于号(===)表示,它只在两个操作数未经转换且值和类型相等的情况下返回 true 。

null == undefined 会返回 true,因为它们是规定;但 null === undefined 会返回 false,因为它们是不同类型的值。

逻辑操作符

逻辑非

逻辑非操作符由一个叹号(!)表示, 对任何值 ,

逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。也就是说,逻辑非操作符遵循下列规则:

  • 如果操作数是一个非空(null)对象,返回 false;

  • 如果操作数是一个空字符串,返回 true;

  • 如果操作数是一个非空字符串,返回 false;

  • 如果操作数是数值 0,返回 true;

  • 如果操作数是任意非 0 数值(包括 Infinity),返回 false;

  • 如果操作数是 null,返回 true;

  • 如果操作数是 NaN,返回 true;

  • 如果操作数是 undefined,返回 true。

同时使用两个逻辑非操作符,也可以用于将一个值转换为与其对应的布尔值

逻辑与

逻辑与操作符由两个和号(&&)表示,有两个操作数,如下面的例子所示:

var result = true && false;

逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;此时,它遵循下列规则:

  • 如果第一个操作数是对象,则返回第二个操作数;

  • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象;

  • 如果两个操作数都是对象(或非0数),则返回第二个操作数;

  • 如果有一个操作数是 null,则返回 null;

  • 如果有一个操作数是 NaN,则返回 NaN;

  • 如果有一个操作数是 undefined,则返回 undefined;

  • 如果有一个操作数是 0 ,则返回0;

对 var  A=B&&C,B表达式的结果判定为真 ,A的结果就是C表达式;B表达式的结果判定为假 ,A的结果是B表达式,C表达式就不会运行了。

逻辑或

逻辑或操作符由两个竖线符号(||)表示,有两个操作数,如下面的例子所示:

var result = true || false;

与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下列规则:

  • 如果第一个操作数是对象,则返回第一个操作数;

  • 如果第一个操作数的求值结果为 false,则返回第二个操作数;

  • 如果两个操作数都是对象(或非0数),则返回第一个操作数;

  • 如果两个操作数都是 null,则返回 null;

  • 如果两个操作数都是 NaN,则返回 NaN;

  • 如果两个操作数都是 undefined,则返回 undefined。

与逻辑与操作符相似,逻辑或操作符也是短路操作符。

对 var a=A||B ,A表达式判定布尔值为真 ,a就为A表达式,B表达式不会运行;A表达式判定布尔值为假  a就为B表达式。

三目运算符

形式:A?B:C;

A B C都是表达式,A表达式判定为布尔值的真就会执行B表达式,反之执行C;整个三目表达式的结果:若A表达式判定为布尔值的真就是B表达式 ,反之就是C表达式。

赋值操作符

简单的赋值操作符由等于号(=)表示,其作用就是把右侧的值赋给左侧的变量,如下面的例子所示:

var num = 10;

如果在等于号(=)前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。

这种复合赋值操作相当于是对下面常规表达式的简写形式:

var num = 10;
num = num + 10;
var num = 10;
num += 10;//num=num+10

 

每个主要算术操作符(以及个别的其他操作符)都有对应的复合赋值操作符。这些操作符如下所示:

  • 乘/赋值(*=);

  • 除/赋值(/=);

  • 模/赋值(%=);

  • 加/赋值(+=);

  • 减/赋值(-=);

逗号操作符

使用逗号操作符可以在一条语句中执行多个操作,如下面的例子所示:

var a, b, d = c, c = 20;

逗号操作符多用于声明多个变量;但除此之外,逗号操作符还可以用于赋值。在用于赋值时,逗号操作符总会返回表达式中的最后一项,如下面的例子所示:

var num = (5, 1, 4, 8, 0); // num 的值为 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值