The
new
operator lets developers create an instance of a user-defined object type or of one of the built-in object types that has a constructor function.(c) MDN
🐊Putout plugin adds ability to add missing and remove useless operator new
.
npm i @putout/plugin-new
{
"rules": {
"new/remove-useless": "on",
"new/add-missing": "on"
}
}
Operator new
has no sense for Boolean
, String
, Number
, Object
, RegExp
, Math
, Reflect
, Error
, TypeError
:
Thus the function call
Error(…)
is equivalent to the object creation expressionnew Error(…)
with the same arguments.(c) https://262.ecma-international.org/12.0/#sec-error-constructor
And Symbol
, BigInt
cannot be used with new
, as it is primitive.
new Error('Something went wrong');
new new Boolean()();
Error('Something went wrong');
Boolean();
The
Set
constructor lets you create Set objects that store unique values of any type, whether primitive values or object references.(c) MDN
Missing operator new
should be added since built-in objects:
-
Set
; -
WeakSet
; -
Map
; -
WeakMap
; -
Int8Array
; -
Uint8Array
; -
Uint8ClampedArray
; -
Int16Array
; -
Uint16Array
; -
Int32Array
; -
Uint32Array
; -
Float32Array
; -
Float64Array
; -
BigInt64Array
; -
BigUint64Array
;
Produces TypeError
when called without new
:
Uncaught TypeError: Constructor Set requires 'new'
const map = Map();
const map = new Map();
Linter | Rule | Fix |
---|---|---|
🐊 Putout | remove-useless-new |
✅ |
⏣ ESLint | no-new-wrappers |
❌ |
⠀ | no-new-object |
❌ |
⠀ | no-array-constructor |
❌ |
⠀ | no-new-symbol |
❌ |
⠀ | no-new-native-constructor |
❌ |
MIT