CppLearner
CppLearner

Reputation: 17040

What does {x:1} do in Javascript?

From Javascript: The Definitive Guide,

var o = { x:1 }; // Start with an object
o.x = 2; // Mutate it by changing the value of a property
o.y = 3; // Mutate it again by adding a new property

What does { x: 1} do here? With the braces, it reminds me of function (or for objects, constructor). Can someone please elaborate on it, thanks.

An additional related question is:

({x:1, y:2}).toString() // => "[object Object]"

I find this question interesting as well. What is the difference between object and Object in the above code? In fact, when do we use Object?

Upvotes: 6

Views: 341

Answers (4)

Thomas Shields
Thomas Shields

Reputation: 8943

It makes the variable o into an object containing one property (x), and sets the value of that property to 1.

Edit

To be clear, as you demonstrated, you don't have to add properties this way. You can create a property on an object simply by assigning it (o.y = "Awesomesauce")

As to your related question; {x:1, y:2} is simply an object literal with two properties x and y with the values 1 and 2, respectively. operating on this object literal is just like operating on a primitive value literal (console.log("my,string".split(","))).

"[object Object]" is just how a non-specifically typed object is represented in string form.

Edit 2

As per your comment: the lowercase "object" is the type. typeof o will give object. The Object (capital "O") is just a string representation of {x:1}. A string representation of an array or number is "smart" because it knows more specifically the type. With a custom object, like o, it's just a generic object and thus writes: object (the type) Object (a string representation of o itself)

Upvotes: 11

Sandro
Sandro

Reputation: 3160

It's called object initializer (At least in C#). It creates a new object o and directly initiates the attribute x with the value 1

Upvotes: 4

Ray Toal
Ray Toal

Reputation: 88428

You already have answers to the first part of your question.

For the second part, you have called the toString() method stored in Object.prototype.

For fun, try this instead:

JSON.stringify({x:1, y:2})

Upvotes: 2

duffymo
duffymo

Reputation: 308948

It's a JSON object, an associative array. The key is "x"; the value is 1.

Upvotes: 3

Related Questions