运算符"-"总是对两个运算数进行代数减法操作,如果运算数是非数值的,那么运算符"-"会将它们试图转换成数值,这一转换和调用parseFloat方法的数值转换类似,但是通常效率更高。如果转换失败,将会得到特殊的值NaN。
"-"通常用来将字符串快速转换成数值,具体操作是将这个字符串减去一个数字0。
例如:
- var a="2.96";
- alert(a+1); //得到字符串"2.961"
- alert(a-0+1) //得到数值3.96
不过需要注意的是,运算符的隐式数值转换和parseFloat并不完全相同,对于字符串来说,前者是一种完全匹配,而后者是一种解析过程;对于布尔常量来说,前者总是将true转换为1,将false转换为0,而后者得到NaN;对于对象来说,前者总是先调用对象的valueOf()方法进行转换,如果失败后再调用toString()方法(唯一例外的是Data类型),而后者则直接尝试调用对象的toString()方法。
从下面的例子可以看出二者的区别:
- parseFloat("123abc"); //得到数值123
- "123abc"-0; //得到NaN
算术运算符"*"、"/"、"++"、"--"、取反"-"、"%"在运算时,如果运算数是非数值的,这些运算符会将它们转换成数值。如果不能转换成数值,就会转换为NaN。