顶级菜鸟的gravatar头像
顶级菜鸟 2016-12-25 18:20:06

js中数字类型的字符串为什么不能转换为Number?

onload = function () {
             var func = function () {
                 var curr = new Date();
                 var t = curr.toLocaleTimeString();
                 document.getElementById("time").innerHTML = t
                 // 00:00:00
                 var temps = t.split(":");
                 // temps[0]小时
                 // temps[1]分钟
                 // temps[2]秒

                 // 00_00     0时0分   0分0秒
                 // 得到分钟,秒
                 // var m = temps[1].length == 1 ? "0" + temps[1] : temps[1];
                 var m = temps[0].length == 1 ? "0" + temps[0] : temps[0];
                 var s = temps[2].length == 1 ? "0"+temps[2] : temps[2];
                 // 拼接
                 alert(m);

                 alert((typeof m)==="string");//返回值类型TRUE
                 alert(Number(m));//返回值类型NAN?为什么不能转换为Number类型
                 alert(m - 0);//返回值类型NAN?为什么不能转换为Number类型
                 var y = "13";
                 alert(Number(y));//返回值类型TRUE

}

所有回答列表(4)
wentao的gravatar头像
wentao  LV24 2016年12月25日

虽然js很灵活,但是不代表它的类型可以随意转换。var m = temps[0].length == 1 ? "0" + temps[0] : temps[0];这里已经是转为字符串了,是属于拼接字符串了。就类似于var a='b';console.log(a+'c');//ac这样子解了。

m - 0是数字型呀,除非m的值有怪异

林__尹的gravatar头像
林__尹  LV6 2016年12月28日

你这个m不是数字的吧,中间会有一个":"吧

ZeroHang的gravatar头像
ZeroHang  LV3 2016年12月30日

用parseInt("");

510869233的gravatar头像
510869233  LV5 2017年5月23日

Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:

用  法 结  果
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( "5.6.7 ") NaN
Number(new Object()) NaN
Number(100) 100  

你要检查m的值是否为undefined 或者用isNAN(m) 检查m是否是数字

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友