按照运算符的优先级排序,运算符集合性,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);//右侧不是函数,抛类型错误异常