一、算术运算符
- +:对数字运行进行加法运行或对字符串进行连接运行;如果运行符是一个对象,则会先调用对象的valueof()或toString()方法。
- -:减法操作,如果其中有非数字操作数,则会先转换成数字
- *:乘法操作,转换同上
- /:除法操作,转换同上。JavaScript中所有的数字都是浮点型,因些除不尽时,结果总返回浮点型
- %:模运算,转换同上。
- -:一元减,执行取反操作,类似于-1*a。转换同上。
- +:一元加操作,无意义。转换同上。
- ++:递增运算符,转换同上。
- --:递减操作,转换同上
二、相等运算符
JavaScript中有两个用于比较相等性的运算符:==(相等运行符)和===(等同运算符)。
- 判断是否等同
- 如果两个值类型不同,则不相同
- 如果两个数字值相同,且均不为NaN,则等同
- 如果两个字符串内容完全相同,则等同。
- 如果两个值均为true或false,则等同
- 如果两个值引用的是同一对象、数组或函数,则等同
- 如果两个值均为null或undefined,则等同判断是否相等
- 判断相等
- 如果两个值类型相同,则相当于等同性
- 如果类型不同:
- 如果一个值为null,另一个为undefined,则相同
- 如果一个值为数字,另一个为字符串,则字符串转成数字后比较值
- 如果一个值为true,则转为1;值为false则转成0,再比较
- 如果一个值为对象,另一个为数字或字符串,则对象转换成原始类型再比较。JavaScript内部先使用valueOf()进行转换,再尝试toString(),但对于Date类,则先执行toString()。不属于javascript核心类型 的对象,则可以采用JavaScript实现定义的方式把自身转换成原始数值
- 其他数值组合是不相等的。
三、in运算符
in运算符要求其左边的运算数是一个字符串,或可以被转换成字符串,右边的运算数是一个对象或数组。如果该运算符左边的值是右边对象的一个属性名,则返回true,例如:
var point= {x:1, y:1}; //Define an object var has_x_coord = "x" in point; //eveluates to true var has_y_coord = "y" in point; //eveluates to true var has_z_coord = "z" in point; //evaluates to false var ts = "toString" in point; //inherited property; evaluates to true
四、typeof运算符
typeof一元运算符放在一个运算数之前,如果运算数是数字、字符串或布尔值,则返回"number"、"string"或"boolean";对对象、数组或null,返回"object";对函数返回"function";对未定义返回"undefined"。
五、delete运算符
delete是一个一元操作符,它将删除运算符所指定的对象的属性、数组元素或变量。如果删除成功,返回true,否则返回false。
并非所有的属性和变量都可以被删除,某些核心的属性和客户端属性不可被删除;用var语句声明的变量也不能被删除。
如果delete使用的运算数是一个不存在的属性,则返回true(令人吃惊的是,ECMAScript标准规定,当delete运算的运算数不是属性、数组元素或变量时,也返回true)。
例如:
var o = {x:1,y:2};
delete o.x; //true
typeof o.x; //undefined
delete o.x; //true
delete o; //false
注:delete所能影响的只是属性值,不能影响属性引用的对象:
var my = new Object();
my.hire = new Date();
my.fire = my.hire;
delete my.hire; //true
document.write(my.fire); //my.fire still refers to the Date Object
六、void运算符
void是一个一元运算符,它可以出现在任何类型的操作数之前。这个运算符的用途比较特殊,它总是舍弃运算数的值,然后返回undefined。