我正在尝试测试一个变量,以确保 [a] 它已初始化并且 [b] 是一个数字,然后再提供数字作为参数。我尝试使用两个函数 noNil(i)
和 noNan(i)
来做到这一点。在测试变量是否为数字之前,先确定变量是否已初始化是有意义的。但首先调用哪个函数没有什么区别。第一个警报报告未定义
,而第二个警报则没有报告任何内容。检查变量是否在纯 JavaScript 中初始化为数字的标准方法是什么?
例如
var i;
noNil();
alert(i);
noNaN(i);
alert(i);
function noNil(i) {
if (i === undefined){
let i = -1;
return i;
}
}
function noNan(i) {
if (isNaN(i)) {
let i = 30;
return i;
}
}
澄清
一些背景信息可能会有所帮助。变量有 5 种定义方式; 0 到 4 从数组中选择颜色。如果未定义,则不会选择任何颜色。
let family = ["yellow", "red", "lime", "cyan","magenta"];
...
ctx.fillStyle = family[i];
最佳答案
使用typeof i === 'number'
判断该值是否为JS number类型。
const checkNumber = i => { if( typeof i !== 'number') throw new Error('Supplied argument is not a number!'); return i;};
function sum(a, b){
return checkNumber(a) + checkNumber(b);
}
console.log(sum(2, 2));
var i;
console.log(sum(i, 2));
关于选择颜色的用例,您可以避免为数字烦恼:
let family = ["yellow", "red", "lime", "cyan","magenta"];
family[i] && (ctx.fillStyle = family[i]);
但主要问题可能是为什么你最终得到的 i
不是颜色数组的正确索引的数字......
如果你想检查字符串,主题突然变得更加复杂(我什至没有涵盖这里的所有情况,例如科学记数法):
var i;
function isNumber(i) {
return typeof i === 'number';
}
function isNumerish(i) {
return !isNaN(parseFloat(i));
}
function isStringNumber(i) {
return /^-?\d*\.?\d+$/.test(i);
}
const checks = [[i, isNumber], [-.5, isNumber], ['-.5a', isNumerish], ['-.5a', isStringNumber], ['-.5', isStringNumber]];
for(const [num, fn] of checks){
console.log(num, fn.name, fn(num));
}
关于javascript - 检查变量是否初始化为 JavaScript 中的数字的标准方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76796883/