Chapter 3. Natives

Several times in Chapters 1 and 2, we alluded to various built-ins, usually called “natives,” like String and Number. Let’s examine those in detail now.

Here’s a list of the most commonly used natives:

  • String()

  • Number()

  • Boolean()

  • Array()

  • Object()

  • Function()

  • RegExp()

  • Date()

  • Error()

  • Symbol()—added in ES6!

As you can see, these natives are actually built-in functions.

If you’re coming to JS from a language like Java, JavaScript’s String() will look like the String(..) constructor you’re used to for creating string values. So, you’ll quickly observe that you can do things like:

var s = new String( "Hello World!" );

console.log( s.toString() ); // "Hello World!"

It is true that each of these natives can be used as a native constructor. But what’s being constructed may be different than you think:

var a = new String( "abc" );

typeof a;                            // "object" ... not "String"

a instanceof String;                 // true

Object.prototype.toString.call( a ); // "[object String]"

The result of the constructor form of value creation (new String("abc")) is an object wrapper around the primitive ("abc") value.

Importantly, typeof shows that these objects are not their own special types, but more appropriately they are subtypes of the object type.

This object wrapper can further be observed with:

console.log( a );

The output of that statement varies depending on your browser, as developer consoles are free to choose however they feel it’s appropriate to serialize the object for ...

Get You Don't Know JS: Types & Grammar now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.