我正在为应该返回浮点数的函数编写单元测试。我试图阻止某人向该函数发送一组字符(注意,我没有说字符串),例如3.2.1
。如果我对这个“数字”使用常规测试,它们似乎都将失败,并显示以下信息:
Uncaught SyntaxError: missing ) after argument list
。
EG:
var result = isNaN(3.2.1);
//相同的错误var result = parseFloat(3.2.1);
//预计会出现NaN,但会收到错误消息var result = typeof 3.2.1 === 'number'
//相同的错误我想我可以将其包装在引号中并作为字符串进行测试(当谓词为字符串时,以上所有测试均按预期进行)。
未能回答这一问题的各种SO问题:
How to check whether a value is a number in JavaScript or jQuery
Is there any function like IsNumeric in JavaScript to validate numbers?
那么,实际的问题:我如何测试具有多个小数点的“数字”并将其拒绝?
这是我的实际代码,其中大多数测试都成功运行:
/**
*
* @param {*} value
* Converts a numeric string value to a float for use by a timeout interval
* datatype: ParseTimeoutInterval(string)
* example: ParseTimeoutInterval('2.5')
* return type: float
* return example: 2.5
*/
SerialWidget.prototype.ParseTimeoutInterval = function (value) {
try {
var self = this;
self.CallListeners('debug', 'ParseTimeoutInterval: value = ' + value);
if (value) {
var result = parseFloat(value);
if(result < 0 || isNaN(result)){
self.CallListeners('debug', 'ParseTimeoutInterval: value is negative or NaN');
return null;
}
return result.toPrecision(2);
} else {
return null;
}
self.CallListeners('debug', 'ParseTimeoutInterval: value is not a number');
return null;
} catch (ex) {
self.OnError('ParseTimeoutInterval', ex.message);
}
};
答案 0 :(得分:2)
假设您擅长检查字符串,然后可以将其拆分为数组并检查长度。
var badNumber = '3.2.1';
if (badNumber.split('.').length > 2) {
console.error('uh oh. THAT\'s not a number!');
} else {
// proceed
}