Number.isFinite() 是 JavaScript 中用于检查一个值是否为 有限数字的静态方法。

1 基本语法

Number.isFinite(value)

返回值

  • true - 如果值是有限数字
  • false - 其他所有情况

2 使用示例

// 有限数字返回 true
console.log(Number.isFinite(0));         // true
console.log(Number.isFinite(42));        // true
console.log(Number.isFinite(-42));       // true
console.log(Number.isFinite(3.14));      // true
console.log(Number.isFinite(-3.14));     // true

// 非有限数字返回 false
console.log(Number.isFinite(NaN));       // false
console.log(Number.isFinite(Infinity));  // false
console.log(Number.isFinite(-Infinity)); // false

// 非数字类型返回 false
console.log(Number.isFinite("42"));      // false
console.log(Number.isFinite("hello"));   // false
console.log(Number.isFinite(true));      // false
console.log(Number.isFinite(false));     // false
console.log(Number.isFinite(null));      // false
console.log(Number.isFinite(undefined)); // false
console.log(Number.isFinite([]));        // false
console.log(Number.isFinite({}));        // false

3 实际应用场景

场景1:安全的数值计算
function safeDivide(a, b) {
    if (!Number.isFinite(a) || !Number.isFinite(b)) {
        throw new Error("参数必须是有效数字");
    }
    if (b === 0) {
        throw new Error("除数不能为零");
    }
    return a / b;
}

console.log(safeDivide(10, 2));   // 5
console.log(safeDivide(10, 0));   // Error: 除数不能为零
console.log(safeDivide(10, "2")); // Error: 参数必须是有效数字
场景2:表单验证
function validateNumberInput(input) {
    const num = Number(input);
    
    if (Number.isFinite(num)) {
        return {
            isValid: true,
            value: num,
            message: "有效的数字输入"
        };
    } else {
        return {
            isValid: false,
            value: input,
            message: "请输入有效的数字"
        };
    }
}

console.log(validateNumberInput("42"));
// { isValid: true, value: 42, message: "有效的数字输入" }

console.log(validateNumberInput("abc"));
// { isValid: false, value: "abc", message: "请输入有效的数字" }
场景3:数组过滤
const mixedData = [1, "2", 3.14, NaN, "hello", Infinity, null, undefined, "45.67"];

// 过滤出有限数字
const finiteNumbers = mixedData.filter(Number.isFinite);
console.log(finiteNumbers); // [1, 3.14, 45.67]

// 或者使用更明确的方式
const finiteNumbers2 = mixedData.filter(item => Number.isFinite(Number(item)));
console.log(finiteNumbers2); // [1, 2, 3.14, 45.67]
场景4:数据清洗
function cleanNumberData(dataArray) {
    return dataArray
        .map(item => Number(item))
        .filter(Number.isFinite);
}

const rawData = ["123", "45.6", "abc", "789", "", "12.34.56"];
const cleanedData = cleanNumberData(rawData);
console.log(cleanedData); // [123, 45.6, 789]

4 手动实现(理解原理)

// 手动实现 Number.isFinite
function myIsFinite(value) {
    return typeof value === 'number' && 
           value !== Infinity && 
           value !== -Infinity && 
           !isNaN(value);
}

console.log(myIsFinite(42));        // true
console.log(myIsFinite(Infinity));  // false
console.log(myIsFinite("42"));      // false
console.log(myIsFinite(NaN));       // false

5 总结

Number.isFinite() 的特点:

  • ✅ 只对真正的有限数字返回 true
  • ✅ 不进行类型转换
  • ✅ 排除 NaNInfinity、非数字值
  • ✅ 最严格的数字检查方法

使用场景:

  • 数学计算前的参数验证
  • 表单输入验证
  • 数据清洗和过滤
  • 确保数值的有效性

这是检查数字的最可靠和推荐的方法!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐