let a1 = []; // new Array()
a1.push("A","B","C");

let a2 = {}; // new Object()
Object.defineProperty(a2, "length",{ value: 0, writable: true, enumerable: false, configurable: false });
Object.setPrototypeOf(a2, Array.prototype);
a2.push("A","B","C");

console.log(a1.toString() == a2.toString()); // "A,B,C"
//→ true

console.log(a1.constructor.name == a1.constructor.name); // "Array"
//→ true

console.log((a1 instanceof Array) && (a2 instanceof Array));
//→ true

console.log(JSON.stringify(a1) + " is " + JSON.parse(JSON.stringify(a1)).constructor.name);
//→ ["A","B","C"] is Array

console.log(JSON.stringify(a2) + " is " + JSON.parse(JSON.stringify(a2)).constructor.name);
//→ {"0":"A","1":"B","2":"C"} is Object


Arrayインスタンス(a1)なのか 本当はObjectインスタンス(a2)だったのをArrayに偽装(※)したのか
なんらかの違いがあるから JSON.stringify は表示を変えているはずです (chrome, firefox, deno で確認)
この場合どこで区別がつくのでしょうか?

※コレで完全にArrayインスタンスになれるものと思っていました