最可靠方式是使用 typeof 操作符,因其返回唯一字符串"bigint";不可靠方法包括 instanceof BigInt(报错)、Object.prototype.toString.call()(非标准)和 Number.isInteger()(精度丢失)。

JavaScript 中检查一个值是否为 BigInt,最可靠、标准的方式是使用 typeof 操作符,因为 BigInt 是 ECMAScript 2020(ES11)正式引入的原始类型,其 typeof 返回值是唯一的字符串 "bigint"。
用 typeof 判断 BigInt 类型
typeof 是唯一能准确区分 BigInt 和其他数值类型的原生方法。它不会将 BigInt 误判为 "number"(像 Number 那样),也不会返回 "object"(像 new Number() 那样)。
示例:
console.log(typeof 123n); // "bigint" console.log(typeof BigInt(456)); // "bigint" console.log(typeof 123); // "number" console.log(typeof "123n"); // "string" console.log(typeof Object(123n)); // "object"(注意:包装对象不等于原始 BigInt)
避免常见误判方式
以下方法不可靠,应避免使用:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
不用
instanceof BigInt:因为BigInt是原始类型,不是构造函数(不能用new),且没有原型链继承关系;123n instanceof BigInt会报错或恒为false。 -
不用
Object.prototype.toString.call():对原始BigInt,它返回"[object BigInt]",看似可行,但属于非标准、不推荐的黑盒检测,且在早期引擎中支持不稳定。 -
不用
Number.isInteger()或isNaN():这些只适用于number类型,传入BigInt会先隐式转为number,导致精度丢失甚至抛出RangeError(例如Number.isInteger(123456789012345678901234567890n))。
兼容性与运行时安全检查
如果需在可能不支持 BigInt 的旧环境(如 IE、Node.js < 10.4)中安全判断,可先检测全局 BigInt 是否存在,再结合 typeof:
function isBigInt(value) {
return typeof BigInt !== 'undefined' && typeof value === 'bigint';
}
该函数在不支持 BigInt 的环境中不会报错,且能正确排除 undefined、null 或未定义的值。
注意包装对象与原始值的区别
Object(123n) 创建的是 BigInt 包装对象,其 typeof 为 "object",不再是原始 BigInt。实际开发中几乎不需要创建包装对象,也不建议用它做类型判断。若必须处理,可用 Object.prototype.toString.call(value) === '[object BigInt]',但这属于边缘情况,日常应以原始值为主。

















