JavaScript 中的 Number.isFinite()详解
·
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 - ✅ 不进行类型转换
- ✅ 排除
NaN、Infinity、非数字值 - ✅ 最严格的数字检查方法
使用场景:
- 数学计算前的参数验证
- 表单输入验证
- 数据清洗和过滤
- 确保数值的有效性
这是检查数字的最可靠和推荐的方法!
更多推荐



所有评论(0)