按照运算符的优先级排序,运算符集合性,L(从左至右)或R(从右至左),操作数类型的列表示期望的操作数类型以及运算符的结果类型(在"->"符号之后)。
lval是left-value的简写,意思是”左值“。
运算符大致包含:
算术运算符
等式运算符
关系运算符
字符串运算符
逻辑运算符
按位运算符
赋值运算符
其它运算符
优先级 |
运算符的集合性 |
运算符 |
执行操作 |
操作数个数 |
操作数类型 |
15 |
L |
. |
属性访问 |
2 |
object, identifier |
|
L |
[] |
数组索引 |
1 |
array, integer |
|
L |
( ) |
函数调用 |
1 |
function, arguments |
|
R |
new |
创建新对象 |
1 |
constructor call |
14 |
R |
++ |
前或后递增的(一元) |
1 |
lval –> num |
|
R |
-- |
前或后递减(一元) |
1 |
lval –> num |
|
R |
- |
求反 |
1 |
number -> number |
|
R |
+ |
转换为数字 |
1 |
number -> number |
|
R |
~ |
按位求反(一元) |
1 |
Int –> Int |
|
R |
! |
逻辑非(一元) |
1 |
bool –>bool |
|
R |
delete |
取消定义的属性(一元) |
1 |
lval -> bool |
|
R |
typeof |
返回的操作数类型(一元) |
1 |
any -> str |
|
R |
void |
返回未定义的值undefined(一元) |
1 |
any -> undefined |
13 |
L |
*, /, % |
乘,除,余数; |
2 |
num ,num -> num |
12 |
L |
+, - |
加法,减法 |
2 |
num ,num -> num |
|
L |
+ |
字符串串联 |
2 |
str, str-> str |
11 |
L |
<< |
左移位 |
2 |
int, int-> int |
|
L |
>> |
有符号右移 |
2 |
int, int-> int |
|
L |
>>> |
无符号右移 |
2 |
int, int-> int |
10 |
L |
<, <= |
小于,小于或等于 |
2 |
num ,num ->bool |
|
L |
>, >= |
大于,大于或等于 |
2 |
num ,num ->bool |
|
L |
instanceof |
检查对象类型 |
2 |
obj, func->bool |
|
L |
in |
检查是否属性存在 |
2 |
obj, str->bool |
9 |
L |
== |
测试相等 |
2 |
any, any->bool |
|
L |
!= |
测试不等 |
2 |
any, any->bool |
|
L |
=== |
测试恒等 |
2 |
any, any->bool |
|
L |
!== |
测试不恒等 |
2 |
any, any->bool |
8 |
L |
& |
按位与 |
2 |
int, int-> int |
7 |
L |
^ |
按位异或 |
2 |
int, int-> int |
6 |
L |
| |
按位或 |
2 |
int, int-> int |
5 |
L |
&& |
逻辑与 |
2 |
any, any->any |
4 |
L |
|| |
逻辑或 |
2 |
any, any->any |
3 |
R |
?: |
条件运算符(三操作数) |
3 |
bool, any, any->any |
R |
= |
变量赋值或对象属性赋值 |
2 |
lval, any->any | |
|
R |
*=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= |
运算且赋值 |
2 |
lval, any->any |
1 |
L |
, |
忽略第一个操作数,返回第二个操作数 |
2 |
any,any->any |
部分代码示例:
//,返回右操作值
if((true,false))
{
alert("ooo");
}
vari,j,k;
//alert((i=1,j=2,k=8));
//转化类型+
varpoint = "7";
//alert(typeof(point));//typeofx 返回值有undefined,object,boolean,number,string,function.
point= +point;
//alert(typeof(point));
//删除属性delete
varo = new Object;
o.name = "David";
//alert(typeof(o.name)); //输出 "string"
delete o.name;
//alert(typeof(o.name)); //输出 "undefined";
//alert(void(1));
//左移,左移一位相当于它乘以2,移两位乘以4
varst = -8;
//alert(st=st.toString(2));//转化成2进制
//alert(st.toString(8));//转化成8进制
//alert(st.toString(16));
//alert("st="+st);
st=st<<1;
//alert("st="+st);
//有符号右移,右移一位相当于它除以2,右移两位除以4,忽略余数(如:7>>1=3, -7>>1=-4)
varsty = -7;
//alert("sty="+sty);
sty=sty>>1;
//alert("sty="+sty);
//"=="和"==="的区别
//alert("1"==true);
//alert("1"===true);
var ppl;
varlpl=null;
var koo =3;
var kok ="3";
//alert(typeof(ppl));
//alert(typeof(lpl));
//alert(ppl==lpl);
//alert(koo==kok);
//in运算符
varpointy ={x:1,y:3};
//alert("x"in pointy)
//alert("toString"in pointy);//继承了toString()方法
vardata = [7,8,9,6];
//alert(4in data);//没有索引为4 的元素
//instanceof希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧的实例(右侧应该是个函数),返回true。
vard = new Date();
//alert(dinstanceof Date);
//alert(dinstanceof Object);//所有对象都是Object实例
//alert(dinstanceof Number);
//alert(dinstanceof d);//右侧不是函数,抛类型错误异常