Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the object[foo] term mean?

Tags:

javascript

I'm confused what the object[foo] term is referring to. Any hints? I know that bar['unique_prop'] and bar.unique_prop refers to 2

    var foo = {unique_prop: 1};
    var bar = {unique_prop: 2};
    var object = {};
    object[foo] = 'value';
    alert(object[bar]);

code on jsfiddle

like image 760
user784637 Avatar asked Jan 31 '26 22:01

user784637


2 Answers

This:

var foo = 'abc';
object[foo]

is equivalent to:

object.abc

However this:

var foo = {unique_prop: 1};
object[foo] = 'value';

Doesn't have much sense (object property names cannot be object literals). JS engine will use foo.toString() (returning e.g. "[object Object]"), so in fact you are doing this:

var foo = {unique_prop: 1};
object["[object Object]"] = 'value';

which is clearly a bug or a misunderstanding. This behaviour is explained in Member Operators on MDN:

Property names must be strings. This means that non-string objects cannot be used as keys in the object. Any non-string object, including a number, is typecasted into a string via the toString method.

You can however use:

object[foo.unique_prop] = 'value';

which is equivalent to:

object[1] = 'value';
like image 118
Tomasz Nurkiewicz Avatar answered Feb 02 '26 11:02

Tomasz Nurkiewicz


It is the same as object.whatever_x_is where x is foo.toString() which will be the same as bar.toString() since (unless overridden) calling toString on a generic object will generate a generic "is an object" string such as "[object Object]"

like image 45
Quentin Avatar answered Feb 02 '26 11:02

Quentin