检查变量是否在 javascript 中初始化为数字的标准方法是什么?

问题描述 投票:0回答:2

我正在尝试测试一个变量,以确保 [a] 它已初始化并且 [b] 是一个数字,然后再提供数字作为参数。我尝试使用两个函数

noNil(i)
noNan(i)
来做到这一点。在测试变量是否为数字之前,先确定变量是否已初始化是有意义的。但首先调用哪个函数没有什么区别。第一个警报报告
undefined
,而第二个警报则没有报告任何内容。检查变量是否在纯 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];
javascript html null nan
2个回答
2
投票

使用

typeof i === 'number'
判断该值是否为JS数字类型。

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));
}


-1
投票

试试这个:

var i;

if(!!i) {
   console.log("undefined or null or (falsy) ");
}
else {
   console.log("The value of i is ", i);
}
© www.soinside.com 2019 - 2024. All rights reserved.