<div dir="ltr"><div><div>I can confirm - <span class=""><span dir="ltr" name="ziyunfei" class="">ziyunfei is right.<br></span></span></div><span class=""><span dir="ltr" name="ziyunfei" class="">Chrome console treats {}+{} as ({}+{}). The first one should be parsed as "empty block, unary plus operator, empty object literal".<br></span></span></div><span class=""><span dir="ltr" name="ziyunfei" class="">({}+{}) is parsed as "empty object literal, addition operator, empty object literal".<br><br></span></span><div><br></div><div><span class=""><span dir="ltr" name="ziyunfei" class="">({}+{}) yields </span></span>"[object Object][object Object]" in all major vendors.<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-13 17:19 GMT+02:00 Till Schneidereit <span dir="ltr"><<a href="mailto:till@tillschneidereit.net" target="_blank">till@tillschneidereit.net</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On Wed, Apr 13, 2016 at 4:32 PM, Caitlin Potter <span dir="ltr"><<a href="mailto:caitpotter88@gmail.com" target="_blank">caitpotter88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">My read of section 12.8.3.1 (<a href="https://tc39.github.io/ecma262/#sec-addition-operator-plus-runtime-semantics-evaluation" rel="noreferrer" target="_blank">https://tc39.github.io/ecma262/#sec-addition-operator-plus-runtime-semantics-evaluation</a>),<br>
is that V8 is getting this right.<br>
<br>
ToPrimitive on `{}` will, by default, return “[object Object]” — We first call `Object.prototype.valueOf()`, which returns `this` (see 19.1.3.7). Following this, we call `toString()`, and get “[object Object]”.<br>
<br>
Subsequent steps of the algorithm just concatenate the two strings together. So it looks like the other vendors are getting this wrong?<br></blockquote><div><br></div></span><div>I don't think that reading is right. Steps 5 and 6 call ToPrimitive without a PreferredType. For objects without a @@toPrimitive property, that ends up calling OrdinaryToPrimitive(input, "number"), which results in NaN. So step 7 isn't called - instead we end up running steps 8-10.<br> </div></div><br></div></div>
</blockquote></div><br></div>