Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is BigInt not a constructor function, unlike Number, Boolean and String?

Tags:

javascript

Number, Boolean and String are constructor functions that correspond to those primitive types.

BigInt is a function that corresponds to the BigInt primitive type, but it is not a constructor function.

new BigInt(1n) // Uncaught TypeError: BigInt is not a constructor

Why?

like image 666
Ben Aston Avatar asked Oct 20 '25 11:10

Ben Aston


1 Answers

The functions for new primitive types (Symbol, BigInt) don't get construction signatures because TC39 doesn't think they need them. On this issue on the BigInt proposal, Jordan Harband (TC39 member and former editor of the specification) said:

Just like Symbol, it doesn't make sense to use new with things that produce a primitive. Since BigInt (like Symbol) is a primitive, it should only be invoked as a function.

Pre-ES6 primitive constructors unfortunately must retain their new-ability, for back compat.

and from this one (also Jordan):

...users should never use new with a Number object tho, because it's widely considered a very bad practice to ever use boxed primitives.

The new paradigm (no pun intended) is the one Symbol follows - if you want an object, you have to explicitly pass the primitive into Object. new Primitive() is a footgun, and new primitives should not continue this legacy pattern.

The use cases for new String, etc., are very few and far between (if there even are any that aren't better solved in other ways). Having construction signatures for Number and String and Boolean is confusing (do you create a string just by using a literal, or by using new String? why is it new String("x") === "x" is false? etc.). It looks like the committee decided to avoid that kind of confusion with newer primitives. (They still have object counterparts, it's just slightly less obvious how you get them, making it less likely to cause confusion.)

like image 83
T.J. Crowder Avatar answered Oct 23 '25 02:10

T.J. Crowder