text.length ist ja schon falsch. Denn es sind 6 Codepoints, nicht 7. Genauso falsch wie @rolf b Lösung. TextDecoder() ist wohl ein experimentelles Feature.
TextDecoder arbeteitet trotzdem richtig. Wie Gunnar schon schrieb, ist die length-Eigenschaft von JS kaputt.
const bytes = [65, 66, 67, 0xF0, 0x9D, 0x9F, 0x82, 0xE2, 0x82, 0xAC, 0xC3, 0xA4];
const text = new TextDecoder().decode(new Uint8Array(bytes));
const codePoints = [...text].map(c => c.codePointAt(0).toString(16));
// ["41", "42", "43", "1d7c2", "20ac", "e4"]