JavaScript中的表达式

一、算术运算符

  • +:对数字运行进行加法运行或对字符串进行连接运行;如果运行符是一个对象,则会先调用对象的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。  

相关推荐