运算符"-"总是对两个运算数进行代数减法操作,如果运算数是非数值的,那么运算符"-"会将它们试图转换成数值,这一转换和调用parseFloat方法的数值转换类似,但是通常效率更高。如果转换失败,将会得到特殊的值NaN。

    "-"通常用来将字符串快速转换成数值,具体操作是将这个字符串减去一个数字0。

例如:

 
  
  1. var a="2.96";  
  2. alert(a+1);    //得到字符串"2.961"  
  3. alert(a-0+1)   //得到数值3.96 

    不过需要注意的是,运算符的隐式数值转换和parseFloat并不完全相同,对于字符串来说,前者是一种完全匹配,而后者是一种解析过程;对于布尔常量来说,前者总是将true转换为1,将false转换为0,而后者得到NaN;对于对象来说,前者总是先调用对象的valueOf()方法进行转换,如果失败后再调用toString()方法(唯一例外的是Data类型),而后者则直接尝试调用对象的toString()方法。

从下面的例子可以看出二者的区别:

 

 
  
  1. parseFloat("123abc");    //得到数值123  
  2. "123abc"-0;    //得到NaN 

    算术运算符"*"、"/"、"++"、"--"、取反"-"、"%"在运算时,如果运算数是非数值的,这些运算符会将它们转换成数值。如果不能转换成数值,就会转换为NaN。