The reason why Object(this) is used is due to the first requirement from the specifications of the Array.prototype.forEach method:

> When the forEach method is called with one or two arguments, the following steps are taken:

Let O be the result of calling ToObject passing the this value as the argument.

2. Let lenValue be the result of calling the [[Get]] internal method of O with the argument "length".

3. Let len be ToUint32(lenValue).

...

So the next question from here might be, why do the specifications require the that occurs to this value?The answer to that is step 2, in regards to the length argument. If the this keyword is a number for example, that has no length, but an Object of that number will.

I think the more likely reason is that ECMAScript's target audience is implementors -- people who will create an actual JavaScript engine. Just look at step two: Get the length value by calling the [[Get]] internal method of O with argument "length". That would look like this:

lenValue = O.get("length")

But of course that's not how we as JavaScript programmers would write it. It wouldn't even work. I think it's obvious that these steps are for the underlying engine, and the author of the forEach implementation was translating engine instructions into JavaScript code. Object(this) is almost certainly a mis-translation. In the underlying engine, that step might be important, but in JavaScript land, it doesn't serve any purpose.