That forEach algorithm is exactly the one specified in the specifications of ECMA-262 5th edition
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.
So using Object(this) is a safety device.