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

What is the standard way to check a variable is initialised as a number in javascript?

提问人:Greg 提问时间:7/30/2023 最后编辑:Greg 更新时间:7/30/2023 访问量:70

问:

我正在尝试测试一个变量,以确保 [a] 它被初始化,[b] 并且在提供数字作为参数之前是一个数字。我尝试使用两个函数和.在测试变量是否为数字之前,确定变量是否已初始化是有意义的。但是,首先调用哪个函数几乎没有区别。第一个警报报告,而第二个警报不报告任何内容。在纯 javascript 中检查变量初始化为数字的标准方法是什么?noNil(i)noNan(i)undefined

例如

    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

评论

0赞 Konrad 7/30/2023
这些函数不执行任何操作。声明一个局部变量,然后返回它,但不对返回的值执行任何操作
2赞 Jaromanda X 7/30/2023
var i... ... ...只是让你知道这不是变量可以拥有的唯一名称......function x(i)let ii
0赞 Konrad 7/30/2023
@JaromandaX我认为 op 想要更改变量的值i
0赞 Jaromanda X 7/30/2023
@Konrad - 我知道,也许有那么多他看不见的......i
0赞 traktor 7/30/2023
可能没有“标准”方法,这取决于您是否要允许自动类型转换(本文中没有说明)。如果你只想测试一个值是否已经是非 NaN 基元数(没有类型转换),你可以使用const isNumber = n=> (+n===n);

答:

-1赞 Anmol Pal 7/30/2023 #1

试试这个:

var i;

if(!!i) {
   console.log("undefined or null or (falsy) ");
}
else {
   console.log("The value of i is ", i);
}
4赞 Alexander Nenashev 7/30/2023 #2

用于确定该值是否为 JS 数字类型。typeof i === '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));
}

评论

0赞 Greg 8/1/2023
亚历山大,这不仅提供了一种解决我眼前问题的方法,而且涵盖了我没有考虑过的问题的各个方面。非常感谢。