Skip to content

Latest commit

 

History

History
139 lines (104 loc) · 2.83 KB

no-instanceof-builtins.md

File metadata and controls

139 lines (104 loc) · 2.83 KB

Disallow instanceof with built-in objects

💼 This rule is enabled in the ✅ recommended config.

🔧💡 This rule is automatically fixable by the --fix CLI option and manually fixable by editor suggestions.

Using instanceof to determine the type of an object has limitations.

Therefore, it is recommended to use a safer method, like Object.prototype.toString.call(foo) or the npm package @sindresorhus/is to determine the type of an object.

Examples

foo instanceof String; // ❌
typeof foo === 'string'; // ✅
foo instanceof Number; // ❌
typeof foo === 'number'; // ✅
foo instanceof Boolean; // ❌
typeof foo === 'boolean'; // ✅
foo instanceof BigInt; // ❌
typeof foo === 'bigint'; // ✅
foo instanceof Symbol; // ❌
typeof foo === 'symbol'; // ✅
foo instanceof Array; // ❌
Array.isArray(foo); // ✅
foo instanceof Function; // ❌
typeof foo === 'function'; // ✅
foo instanceof Object; // ❌
Object.prototype.toString.call(foo) === '[object Object]'; // ✅
import is from '@sindresorhus/is';

foo instanceof Map; // ❌
is(foo) === 'Map'; // ✅

Options

strategy

Type: 'loose' | 'strict'
Default: 'loose'

The matching strategy:

  • 'loose' - Matches the primitive type (string, number, boolean, bigint, symbol) constructors, Function, and Array.
  • 'strict' - Matches all built-in constructors.
"unicorn/no-instanceof-builtins": [
	"error",
	{
		"strategy": "strict"
	}
]

include

Type: string[]
Default: []

Specify the constructors that should be validated.

"unicorn/no-instanceof-builtins": [
	"error",
	{
		"include": [
			"WebWorker",
			"HTMLElement"
		]
	}
]

exclude

Type: string[]
Default: []

Specifies the constructors that should be excluded, with this rule taking precedence over others.

"unicorn/no-instanceof-builtins": [
	"error",
	{
		"exclude": [
			"String",
			"Number"
		]
	}
]

useErrorIsError

Type: boolean
Default: false

Specifies using Error.isError() to determine whether it is an error object.

"unicorn/no-instanceof-builtins": [
	"error",
	{
		"strategy": "strict",
		"useErrorIsError": true
	}
]

This option will be removed at some point in the future.