1

In Chrome, the following JavaScript code throws an Unexpected Token error:

var somearray = ["foo","bar"];
var someassoc = {somearray[0]:somearray[1]};

The error thrown:

Uncaught SyntaxError: Unexpected token [

When instead I would expect that it should make an object with a key of somearray[0] and an item of somearray[1] for that key.

So, why is this happening? An Unexpected Token normally means that a bracket has been misplaced somewhere, etc, but that is not the case here.

Toastrackenigma
  • 7,604
  • 4
  • 45
  • 55

2 Answers2

7

The key for the JS object literal must be either a static key, or an expression enclosed in [] (requires ES2015 support).

The problem with your code is that the somearray[0] key is invalid.

So if you need a ES5 way you rewrite it as

var somearray = ["foo","bar"];
var someassoc = {};
someassoc[somearray[0]] = somearray[1];

and for ES2015 you use

var somearray = ["foo","bar"];
var someassoc = { [somearray[0]]: somearray[1]};

Relevant parts of the standard:

In short: the key must be a valid identifier.

zerkms
  • 249,484
  • 69
  • 436
  • 539
6

In JavaScript, when declaring an object, the key name should be always a simple string, for example:

var object = {'key': 'Hello World'};

However, if you would like to use a key name that is dynamic, like somearray[0], all you need to do is declare someassoc as an object:

var someassoc = {};

And then, set up a key-value combination, by doing:

someassoc.key = 'Hello World';

OR

someassoc['key'] = 'Hello World';

Which in your case will be:

someassoc[somearray[0]] = somearray[1];

That's all :)

nirpeled
  • 178
  • 1
  • 2
  • 8