util.types.isNativeError(value)


稳定性: 0 - 弃用:请改用 Error.isError

注意: 从 Node.js v24 开始,Error.isError() 目前比 util.types.isNativeError() 慢。如果性能至关重要,请考虑在你的环境中对两者进行基准测试。

如果该值是由 内置 Error 类型 的构造函数返回的,则返回 true

【Returns true if the value was returned by the constructor of a built-in Error type.】

console.log(util.types.isNativeError(new Error()));  // true
console.log(util.types.isNativeError(new TypeError()));  // true
console.log(util.types.isNativeError(new RangeError()));  // true 

原生错误类型的子类也是原生错误:

【Subclasses of the native error types are also native errors:】

class MyError extends Error {}
console.log(util.types.isNativeError(new MyError()));  // true 

一个值是本地错误类的 instanceof 并不等同于 isNativeError() 对该值返回 trueisNativeError() 对来自不同 字段 的错误返回 true,而 instanceof Error 对这些错误返回 false

【A value being instanceof a native error class is not equivalent to isNativeError() returning true for that value. isNativeError() returns true for errors which come from a different realm while instanceof Error returns false for these errors:】

import { createContext, runInContext } from 'node:vm';
import { types } from 'node:util';

const context = createContext({});
const myError = runInContext('new Error()', context);
console.log(types.isNativeError(myError)); // true
console.log(myError instanceof Error); // falseconst { createContext, runInContext } = require('node:vm');
const { types } = require('node:util');

const context = createContext({});
const myError = runInContext('new Error()', context);
console.log(types.isNativeError(myError)); // true
console.log(myError instanceof Error); // false

相反,isNativeError() 对所有不是由原生错误构造函数返回的对象都会返回 false。这包括那些是原生错误的 instanceof 的值:

【Conversely, isNativeError() returns false for all objects which were not returned by the constructor of a native error. That includes values which are instanceof native errors:】

const myError = { __proto__: Error.prototype };
console.log(util.types.isNativeError(myError)); // false
console.log(myError instanceof Error); // true