Разница заключается в реализации функции Array. Является ли вызов массива без нового оператора возвратом экземпляра массива или нет, зависит от реализации. Например, движок SpiderMonkey Mozilla делает это:
static JSBool
Array(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
jsuint length;
jsval *vector;
/* If called without new, replace obj with a new Array object. */
Это фактический комментарий от фактического источника. Следующие строки кода здесь не воспроизводятся. Я бы предположил, что другие двигатели делают то же самое. В противном случае поведение не определено. Хорошее чтение на эту тему - сообщение Джона Ресига здесь .