我试图创建一个简单的程序,将用户提供的小时数转换为秒,并要求用户重新输入小时数,如果他提供了一个字符串。当我输入非正数时它工作正常数字,但如果输入字符串值,则不显示任何消息。 这是代码:
function convertToSeconds () {
var d = prompt("Enter any hour between 0-24","4");
if ( d<0 ){
alert("Please enter a number greater than zero");
convertToSeconds();
}
else if( typeof d == String ) {
/*Problem seems to be here*/
alert(d + " is not a valid number");
convertToSeconds();
}
else {
var seconds = 3600*parseFloat(d);
document.write(seconds);
}
};
convertToSeconds();
答案 0 :(得分:1)
提示方法仅返回字符串。您需要确定字符串是否可以转换为0到24之间的正整数,因此:
var d = prompt('Enter any hour between 0-24');
if ( /^(1?[0-9]|2[0-4])$/.test(d) ) {
alert('looks good');
} else {
alert('don\'t like that');
}
或者您可以执行以下操作:
var d = Number(prompt('Enter any hour between 0-24'));
if (d == parseInt(d) && d > -1 && d < 25 {
// ok
}
// not ok
}
答案 1 :(得分:0)
您的代码只是一个问题。 typeof "any string" = "string"
不是String
,JS也默认以字符串格式将数字强制转换为数字,因此我建议在编号之前检查字符串。
function convertToSeconds () {
var d = prompt("Enter any hour between 0-24","4");
if ( d<0 ){
alert("Please enter a number greater than zero");
convertToSeconds();
}
else if( isNaN(d) ) {
/*Problem seems to be here*/
alert(d + "is not a valid number");
convertToSeconds();
}
else {
var seconds = 3600*parseFloat(d);
document.write(seconds);
}
};
convertToSeconds();