alert( "0abc" - 1 );
alert( "0xa" - 1 );为什么第一个是NaN,第二个是9呢?在这个减法运算中,是先进行数据类型的转换,还是先进行减法运算呢?求助~~谢谢

解决方案 »

  1.   

    第一个NaN不解释第二个0xa就是十进制中的10 减1后为9
      

  2.   

    以上基于js中的一个原则:
    当一个字符串用于数字环境中,它会自动地转换为一个数字.另外:+这个符号很特殊,她可以做字符串的连接符至于你要问为什么会有这么一个原则,那是js定的,不是我定的,我不知道了
      

  3.   

    第一个0abc是一个字符串,而不是八进制。
    第二个0xa先转为十进制的10,再减1。
      

  4.   

    字符串和数据减会转类型
    0abc不是js不想转,但是以0开头的是8进制,也就是说最大数字就是7,abc是十六进制中才有用了,所以无法转换,就是NaN
    第二个就是十六进制,0xa就是十进制的10
      

  5.   

    那既然是先转换数据类型的话为什么
    alert( "0abc" - 1 ); == NaN;
    alert( parseInt("0abc") - 1 )  == -1;
      

  6.   

    这种隐式的转换,是将字符串转换为数值么?如果是转换为数值,是parseInt()或者parseFloat()么?如果不是转换为数值,为什么对于十六禁止的字符串可以转换为数值而对于非8进制,10进制,16禁止的任意字符串都转换为NaN呢?
      

  7.   

    按照道理说ECMA提供了两种将非数字的原始值转换为数字的方法parseInt() parseFloat()这两种方法都是先判读首字符是否为数字,如果不是,该方法就返回NaN,如果是数字,则持续下去,直到完成或者发现其他非有效数字,然后返回数值。那么这种隐式的转换也应该符合这样的规则?为什么不是-1呢?