I gave my new fuzzer a break from testing TraceMonkey by asking it to look for differences between SpiderMonkey and JavaScriptCore. I have listed them below, with SpiderMonkey output above JavaScriptCore output.
I have no idea how many of these are bugs (in SpiderMonkey or JavaScriptCore) and how many are ambiguous in the spec (intentionally or unintentionally).
Early error reporting
SpiderMonkey reports some errors at compile time that JavaScriptCore only reports at run time, if the code is actually hit. The difference is most obvious (and most likely to cause compatibility problems) if the code is skipped.
> if (false) { --1; }
<span class="spidermonkey" >S: SyntaxError: invalid decrement operand</span>
<span class="javascriptcore">J: (no error)</span>
> if (false) { return; }
<span class="spidermonkey" >S: SyntaxError: return not in function</span>
<span class="javascriptcore">J: (no error)</span>
instanceof
The two engines disagree about what objects are reasonable operands for the 'instanceof' operator.
> ({} instanceof {a:2})
<span class="spidermonkey" >S: typein:3: TypeError: invalid 'instanceof' operand ({a:2})</span>
<span class="javascriptcore">J: false</span>
> ({} instanceof eval)
<span class="spidermonkey" >S: false</span>
<span class="javascriptcore">J: Exception: TypeError: instanceof called on an object with an invalid prototype property.</span>
new with native functions
SpiderMonkey allows the "new" operator to be used with some native functions that JavaScriptCore considers non-constructors.
> new Math.sqrt(16)
<span class="spidermonkey" >S: 4</span>
<span class="javascriptcore">J: Exception: TypeError: Result of expression 'Math.sqrt' ... is not a constructor.</span>
> new ({}.toString)
<span class="spidermonkey" >S: [object Object]</span>
<span class="javascriptcore">J: Exception: TypeError: Result of expression '({}.toString)' ... is not a constructor.</span>
> new eval
<span class="spidermonkey" >S: typein:9: EvalError: function eval must be called directly, and not by way of a function of another name</span>
<span class="javascriptcore">J: Exception: TypeError: Result of expression 'eval' ... is not a constructor.</span>
Converting between numbers and strings
> print(+'\00000027')
<span class="spidermonkey" >S: NaN</span>
<span class="javascriptcore">J: 0</span>
> (1e-10).toString(16)
<span class="spidermonkey" >S: 0.000000006df37f675ef6ec</span>
<span class="javascriptcore">J: 0</span>
const
There are subtle differences in handling of this new keyword.
> const d; const d;
<span class="spidermonkey" >S: TypeError: redeclaration of const d</span>
<span class="javascriptcore">J: (no error)</span>
> const c = 0; print(++c);
<span class="spidermonkey" >S: 0</span>
<span class="javascriptcore">J: 1</span>
Other differences
> print((function(){return arguments;})());
<span class="spidermonkey" >S: [object Object]</span>
<span class="javascriptcore">J: [object Arguments]</span>
> typeof /x/
<span class="spidermonkey" >S: object</span>
<span class="javascriptcore">J: function</span>
See Mozilla bug 61911, which changed this in SpiderMonkey in 2007.