JavaScript表达式
表达式指可以运算,且必须返回一个值的式子。
表达式一般由值、变量、运算符、子表达式构成。
最简单的表达式可以是一个简单的值或变量:
1 //数字表达式
"a" //字符常表达式
true //布尔值表达式
a //变量表达式
值表达式的返回值是它本身,变量表达式的返回值为变量存储或引用的值。
把这些简单的表达式合并为一个复杂的表达式,那么连接这些表达式的符号就是运算符。
JavaScript运算符
运算符就是根据特定算法定义的执行运算的命令。
示例:a,b,c为变量表达式,而1和2是指表达式。而“=”和“+”是连接这些简单表达式的运算符。
var a = 1, b = 2;
var c = a + b;
运算符一般使用符号来表示,如“+” “-” “/” “=” “|”等,也有些运算符使用关键字来表示,如delete、void等。
作用于运算符的子表达式被称为操作数。根据操作数的个数,JavaScript运算符可以分为如下3种类型:
- 一元运算符:
一个运算符能够结合一个操作数,把一个操作数运算后转换为另一个操作数。如“++”,“- -”等。 - 二元运算符:
一个运算符能够结合两个操作数,形成一个复杂的表达式。大部分运算符都属于二元运算符。 - 三元运算符:
一个运算符能够结合三个操作数,把三个操作数合并为一个表达式,最后返回一个值。JavaScript仅定义了一个三元运算符( ? :),它相当于条件语句。
JavaScript运算符表
分类 | 运算符 | 操作数类型 | 运算顺序 | 运算方向 | 说明 |
---|---|---|---|---|---|
算数运算符 | + | 数值 | 12 | 左 | (加法)将两个数相加 |
++ | 数值 | 14 | 右 | (自增)将表示数值的变量加1(可以返回新值或旧值) | |
- | 数值 | 12 | 左 | (减法)将两个数相减 | |
- - | 数值 | 14 | 右 | (自减)将表示数值的变量减1(可以返回新值或旧值) | |
- | 数字 | 14 | 右 | 一元求负运算 | |
+ | 数字 | 14 | 右 | 一元求正运算 | |
* | 数值 | 13 | 左 | (乘法)将两个数相乘 | |
/ | 数值 | 13 | 左 | (除法)将两个数相除 | |
% | 数值 | 13 | 左 | (求余)求两个数相除的余数 | |
字符串运算符 | + | 字符串 | 12 | (字符串加法)连接两个字符串 | |
+= | 字符串 | 2 | 右 | 连接两个字符串,并将结果赋给第一个字符串 | |
逻辑运算符 | && | 布尔值 | 5 | 右 | (逻辑与)如果两个操作数都是真,则返回真,否则返回假 |
布尔值 | 4 | 左 | (逻辑或)如果两个操作数都是假,则返回假,否则返回真 | ||
! | 布尔值 | 14 | 右 | (逻辑非)如果其单一操作为真,则返回假,否则返回真 | |
位运算符 | & | 整数 | 8 | 左 | (按位与)如果两个操作数对应位只有一个1,则在该位返回1 |
^ | 整数 | 7 | 左 | (按位异或)如果两个操作数对应位只有一个1,则在该位返回1 | |
整数 | 6 | 左 | (按位或)如果两个操作数对应位都是0,则在该位返回0 | ||
~ | 整数 | 14 | 右 | (求反)按位求反 | |
<< | 整数 | 11 | 左 | (左移)将第一操作数的二进制形式的每一位向左移位,所位移的数目由第二操作数指定。右面的空位补0 | |
>> | 整数 | 11 | 左 | (算数右移)将第一操作数的二进制形式的每一位向右位移,所位移的数目由第二操作数指定。忽略被移出的位 | |
>>> | 整数 | 11 | 左 | (逻辑右移)将第一操作数的二进制形式的每一位向右移位,所位移的数目由第二操作数指定。忽略被移出的位,左面的空位补0 | |
赋值运算符 | = | 标识符,任意 | 2 | 右 | 将第二操作数的值赋给第一操作数 |
+= | 标识符,任意 | 2 | 右 | 将两个数相加,并将和赋给第一个数 | |
-= | 标识符,任意 | 2 | 右 | 将两个数相减,并将差赋给第一个数 | |
*= | 标识符,任意 | 2 | 右 | 将两个数相乘,并将积赋给第一个数 | |
/= | 标识符,任意 | 2 | 右 | 将两个数相除,并将商赋给第一个数 | |
%= | 标识符,任意 | 2 | 右 | 计算两个数相除的余数,并将余数赋给第一个数 | |
&= | 标识符,任意 | 2 | 右 | 执行按位与,并将结果赋给第一个操作数 | |
^= | 标识符,任意 | 2 | 右 | 执行按位异或,并将结果赋给第一个操作数 | |
标识符,任意 | 2 | 右 | 执行按位异或,并将结果赋给第一个操作数 | ||
赋值运算符 | <<= | 标识符,任意 | 2 | 右 | 执行左移,并将结果赋给第一个操作数 |
>>= | 标识符,任意 | 2 | 右 | 执行算术右移,并将结果赋给第一个操作数 | |
>>>= | 标识符,任意 | 2 | 右 | 执行逻辑右移,并将结果赋给第一个操作数 | |
比较运算符 | == | 任意 | 9 | 左 | 如果操作数相等,则返回真 |
=== | 任意 | 9 | 左 | 如果操作数完全相同,则返回真 | |
!= | 任意 | 9 | 左 | 如果操作数不相等,则返回真 | |
!== | 任意 | 9 | 左 | 如果操作数不完全相同,则返回真 | |
> | 数值或字符串 | 10 | 左 | 如果左操作数大于右操作数,则返回真 | |
>= | 数值或字符串 | 10 | 左 | 如果左操作数大于等于右操作数,则返回真 | |
< | 数值或字符串 | 10 | 左 | 如果左操作数小于右操作数,则返回真 | |
<= | 数值或字符串 | 10 | 左 | 如果左操作数小于等于右操作数,则返回真 | |
特殊运算符 | ?: | 布尔值,任意 | 3 | 右 | 执行一个简单的"if…else"语句 |
,(逗号) | 任意 | 1 | 左 | 计算两个表达式,返回第二个表达式的值 | |
delete | 属性标识 | 14 | 右 | 允许删除一个对象的属性或数组中指定的元素 | |
new | 类型,参数 | 15 | 右 | 允许创建一个用户自定义对象类型或内建对象类型的实例 | |
特殊运算符 | typeof | 任意 | 14 | 右 | 返回一个字符串,表明未计算的操作数的数据类型 |
instanceof | 对象,类型 | 10 | 左 | 检查对象的类型 | |
in | 字符串,对象 | 10 | 左 | 检查一个属性是否存在 | |
特殊运算符 | void | 任意 | 14 | 右 | 该运算符指定了要计算一个表达式但不返回值 |
. (点) | 对象,标识符 | 15 | 左 | 属性存取 | |
[] | 数组,整数 | 15 | 左 | 数组下标 | |
() | 函数,参数 | 15 | 左 | 函数调用 |
条件运算符
语法格式:
condition ? expr1 : expr2
condition是一个逻辑表达式,当其为true时,则执行expr1表达式,否则执行expr2表达式。
条件运算符可以拆分为条件结构:
if(condition)
expr1;
else
expr2;
示例:借助三元运算符初始化变量为"no value",而不是默认的undefined.
name = name ? name : "no value";
alert(name);
逗号运算符
逗号运算符(,)能够依次计算两个操作数并返回第2个操作数的值。
示例:先定义一个数组a[],然后再一个for循环内利用逗号运算符同时计算两个变量值的变化。这时可以看到输出的数组都是位于二维数组的对角线上。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var a = [];
for(var i = 0, j = 10; i < 10; i++, j--){
a[i,j] = i + j;
document.write(" a[" + i + "," + "]= " + a[i,j]);
}
</script>
</head>
<body>
</body>
</html>
void运算符
void运算符指定要计算一个表达式,但是不返回值。语法如下:
javascript:void (expression)
javascript:void expression
expression时一个要计算的JavaScript标准的表达式。表达式外侧的圆括号是可选的。例如:
<a href="javascript:void(document.forms[0].submit())">提交表单</a>
上面这个代码创建了一个超链接,当用户单击时不会发生任何事。当用户单击超链接时,void(0)计算为0,但在JavaScript上没有任何效果。