今天遇到了一个JS中相当奇怪的问题:
对日期字符串2010-08-11 进行字符串截取
var date='2010-08-11 ';
想通过
parseInt(date.substr(5, 2))获取月份值8可是发现返回值总是0;迷惑不解,翻开JS课件,才发现自己真是孤陋寡闻了......
现在谈谈parseInt(xxx,[radix])) 和 parseInt(xxx)的用法:
parseInt(numStr, [radix])
参数:
numStr 必选项- 要转换为数字的字符串。
radix 可选项。在 2 和 36 之间的表示 numStr所保存数字的进制的值。如果没有提供,则numStr前缀为 '0x' 的字符串被当作十六进制,numStr前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。
例如:
var numStr='07';
parseInt(numStr);//返回7 ok
var numStr='011';
parseInt(numStr);//返回9 奇怪? 正向前面讲述说的原因,当不指定radix 的值,前缀为'0'的字符串按八进制进行处理,所以会返回9
要得到11需要:
parseInt(numStr,[10]);//返回11
如果 numString 的前缀不能解释为整数,则返回 NaN(而不是数字)。
如:
parseInt("abc") // 返回 NaN。
然而:
parseInt("12a1bc") // 返回 12。
parseInt("018") // 返回 1。因为前缀为'0’视为八进制,8为不可解析的数,所以返回 1。
parseInt("0x1E") // 返回 30。
parseInt("0x1G")
由此可见,只要前缀可以解析成数字的就会返回数字 不能解析的部分会自动抛弃。