These are not the same things.
In the first case you assign a string to a randomly generated key.
var numberOne = new Object(); // create an object
rand = Math.random(); // make a random number
numberOne[rand] = "random number"; // use the random number as a key name and assign the string as its value
In the second you assign a random number to a key named rando
, then try to assign a string to a key that is named as whatever the rando
variable is (which is undefined).
var numberTwo = {}; // create an object.
numberTwo.rando = Math.random(); // assign a random number to key named rando
numberTwo[rando] = "another random number"; // here, rando is undefined variable and causes an error.
To make the second example work just do wkat you did in the first one, just change the new Object constructor to an object literal, or:
var numberTwo = {}; // create an object.
numberTwo.rando = Math.random(); // assign a random number to key named rando
numberTwo[numberTwo.rando] = "another random number"; // use the value of numberTwo.rando as a key name
Now numberTwo
looks like this:
Object {rando: 0.7977171319071203, 0.7977171319071203: "another random number"}
The key difference here is that object.keyname = x
assigns a value to a key named keyname
, while object[keyname] = x
resolves the value of a variable named keyname
and assigns the value to a key named with the value. (for example var keyname = "xy"; object[keyname] = 'x';
will result in an object { xy: 'x' }
.