Javascript替换8和9的字符串不起作用...但其他数字做...?

Rap*_*ael 6 javascript replace

看看这个脚本...运行,看看奇怪..

http://jsfiddle.net/BjJTc/

来自jsfiddle

var m = 'Jan07';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));

var m = 'Jan08';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));


var m = 'Jan09';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));


var m = 'Jan10';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 10

这是八达通问题:试试parseInt(val, 10).领先的零使它相信它是八进制的.parseInt采用第二个可选参数radix:

radix 一个整数,表示上述字符串的基数.虽然此参数是可选的,但请始终指定它以消除读者混淆并保证可预测的行为.当未指定基数时,不同的实现会产生不同的结果.

所以:

parseInt('09') // 0
parseInt('09', 10); // 9
Run Code Online (Sandbox Code Playgroud)

  • 你应该总是为`parseInt`提供一个基数. (4认同)