6. 表达式和运算符
表达式
表达式是Javascript中的一个短语,Javascript解释器会将其计算(evaluate)出一个结果。
表达式由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。
JavaScript 表达式主要有以下几种形式:
■ 原始表达式:常量、变量、保留字。 // "hello", 1.2
■ 对象、数组初始化表达式:var obj={a:1,b:2};,var arr=[1,2,3];
■ 函数定义表达式:var foo=function(x,y){return x*y;}
■ 属性访问表达式:Math.abs, a[1]
■ 调用表达式:fn(1);
■ 对象创建表达式:new object();
运算符概述
Javascript中的运算符用于算术表达式、比较表达式、逻辑表达式、赋值表达式等。
运算符可以根据其操作数的个数进行分类:一元操作符(unary operator)、二元运算符(binary operator)、三元运算符(ternary operator)
一元操作符(unary operator):
var age = 29;
二元运算符(binary operator):将两个表达式合并成一个较为复杂的表达式
var a = 1;
var b = 2;
var c = a*b;
三元运算符(ternary operator):将三个表达式合并成一个表达式 (条件?语句1:语句2)
var a = 3;
type a == "number"?alert("这是一个数字"):alert("这不是一个数字");
算术表达式
算术运算符用于执行变量与/或值之间的算术运算。
标题为 A 的列表示运算符的结合性(Associativity),L 表示从左至右、R 表示从右至左,标题为 N 的列表示操作数的个数(Number)。
| 运算符 | 描述 | A | N | 例子 | x 运算结果 | y 运算结果 |
|---|---|---|---|---|---|---|
| + | 加法 | L | 2 | x=y+2 | 7 | 5 |
| – | 减法 | L | 2 | x=y-2 | 3 | 5 |
| * | 乘法 | L | 2 | x=y*2 | 10 | 5 |
| / | 除法 | L | 2 | x=y/2 | 2.5 | 5 |
| % | 取模(余数) | L | 2 | x=y%2 | 1 | 5 |
| ++ | 自增 | L | 2 | x=++y x=y++ | 6 5 | 6 6 |
| — | 自减 | L | 2 | x=–y x=y– | 4 5 | 4 4 |
赋值表达式
赋值运算符用于给 JavaScript 变量赋值。
给定 x=10 和 y=5,下面的表格解释了赋值运算符:
标题为 A 的列表示运算符的结合性(Associativity),L 表示从左至右、R 表示从右至左,标题为 N 的列表示操作数的个数(Number)。
| 运算符 | A | N | 例子 | 等同于 | x 运算结果 |
|---|---|---|---|---|---|
| = | R | 2 | x=y | x=5 | |
| += | R | 2 | x+=y | x=x+y | x=15 |
| -= | R | 2 | x-=y | x=x-y | x=5 |
| *= | R | 2 | x*=y | x=x*y | x=50 |
| /= | R | 2 | x/=y | x=x/y | x=2 |
| %= | R | 2 | x%=y | x=x%y | x=0 |
关系表达式
关系运算符用于测试两个值之间的关系(比如“相等”,“小于”,“大于”)。
标题为 A 的列表示运算符的结合性(Associativity),L 表示从左至右、R 表示从右至左,标题为 N 的列表示操作数的个数(Number)。
| 运算符 | 描述 | A | N |
|---|---|---|---|
| == | 判断相等 | L | 2 |
| != | 判断不等 | L | 2 |
| === | 判断恒等(值和类型都相等) | L | 2 |
| !== | 判断非恒等 | L | 2 |
| > | 大于 | L | 2 |
| >= | 大于等于 | L | 2 |
| < | 小于 | L | 2 |
| <= | 小于等于 | L | 2 |
逻辑表达式
逻辑运算符是对操作数进行布尔算术运算。
标题为 A 的列表示运算符的结合性(Associativity),L 表示从左至右、R 表示从右至左,标题为 N 的列表示操作数的个数(Number)。
| 运算符 | 描述 | A | N |
|---|---|---|---|
| ! | 逻辑非 | R | 1 |
| && | 逻辑与 | L | 2 |
| || | 逻辑或 | L | 2 |
位运算表达式
标题为 A 的列表示运算符的结合性(Associativity),L 表示从左至右、R 表示从右至左,标题为 N 的列表示操作数的个数(Number)。
| 运算符 | 描述 | A | N |
|---|---|---|---|
| ~ | 按位求反 | R | 1 |
| << | 左移位 | L | 2 |
| >> | 有符号右移 | L | 2 |
| >>> | 无符号右移 | L | 2 |
| & | 按位与 | L | 2 |
| | | 按位或 | L | 2 |
| ^ | 按位异或 | L | 2 |
其他表达式
标题为 A 的列表示运算符的结合性(Associativity),L 表示从左至右、R 表示从右至左,标题为 N 的列表示操作数的个数(Number)。
| 运算符 | 描述 | A | N |
|---|---|---|---|
| delete | 删除属性 | R | 1 |
| typeof | 检测操作数类型 | R | 1 |
| void | 返回undefined值 | R | 1 |
| instanceof | 测试对象类 | L | 2 |
| in | 测试属性是否存在 | L | 2 |
void是一个一元运算符,它出现在操作数之前,操作数可以是任意类型。忽略计算结果并返回undefined。一般使用void来让程序更具语义。
<a href="javascript:void(0);" onclick="alert('a链接被禁用了')">点击打开</a>
