Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error calling forEach on an array literal in javascript [duplicate]

This code generates an error when I run it with node v6.9.2

var req = {}

['foo', 'bar'].forEach(prop => {
    console.log("prop: " + prop)
});

The error is: TypeError: Cannot read property 'forEach' of undefined

Why would that be? There doesn't seem to be anything syntactically wrong with what I'm doing. I note that if I add a semi-colon after the var req = {} line the error disappears, but I still don't understand why since I thought semi-colons were optional in JavaScript as long as each statement was on a separate line.

like image 950
rmacqueen Avatar asked Dec 06 '22 14:12

rmacqueen


1 Answers

Automatic semicolon insertion has turned

var req = {}
['foo', 'bar']

into

var req = {}['foo', 'bar']

and of course {} doesn't contain a 'bar' property (because 'foo', 'bar' evaluates to 'bar').

(undefined).forEach(...) gets evaluated, which then leads to the error that you're seeing.


If you're relying on ASI, it's common practice to prefix lines beginning with [] or () with a semicolon:

var req = {}
;['foo', 'bar']
like image 77
zzzzBov Avatar answered Dec 08 '22 04:12

zzzzBov