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

6ie5vjzr  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(87)

我试图测试一个变量,以确保[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];

lf5gs5x2

lf5gs5x21#

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

tzcvj98z

tzcvj98z2#

试试这个:

var i;

if(!!i) {
   console.log("undefined or null or (falsy) ");
}
else {
   console.log("The value of i is ", i);
}

字符串

相关问题