Cannot read property 'forEach' of undefined

var funcs = []
[1, 2].forEach( (i) => funcs.push( () => i ) )

Why does it produce the error below?

TypeError: Cannot read property 'forEach' of undefined at Object.<anonymous>

However, the error goes away if the semicolon ; is added to the end of the first line.

2

5 Answers

There is no semicolon at the end of the first line. So the two lines run together, and it is interpreted as setting the value of funcs to

[][1, 2].forEach( (i) => funcs.push( () => i ) )

The expression 1, 2 becomes just 2 (comma operator), so you're trying to access index 2 of an empty array:

[][2] // undefined

And undefined has no forEach method. To fix this, always make sure you put a semicolon at the end of your lines (or if you don't, make sure you know what you're doing).

5

Keep the semi-colon so the variable declaration of funcs does not include the anonymous array you instantiate as belonging to the variable and also, if you are simply trying to push all the elements of the array into 'funcs' then it should look like:

[1, 2].forEach( (i) => funcs.push(i) )
1

we called the forEach method on an undefined value, we got the error.

 const myarr = undefined;
// Initialize to empty array if falsy
const arr = myarr || [];
// Using optional chaining
arr?.forEach(element => { console.log(element);
});
// Check if truthy
if (arr) { arr.forEach(element => { console.log(element); });
}
// Check if Array
if (Array.isArray(arr)) { arr.forEach(element => { console.log(element); });
}

Another solution to this problem is to avoid using anonymous array. No semicolons needed.

var funcs = []
var arr = [1, 2]
arr.forEach( (i) => funcs.push( () => i ) )

Add semi-colon in the of first line

var funcs = []; //<-- ; semi-colon added here
[1, 2].forEach( (i) => funcs.push( () => i ) )

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like