Soso. Da Dein Code in node nur Fehler schmeisst habe ich das mal nachgemacht:
Ohne BOM:
str = "a;b";
'a;b'
ab = str.split(";");
[ 'a', 'b' ]
ab[0].length
1
ab[1].length
1
Mit BOM:
str = "\uFEFF"+"a;b"+"\uFEFF";
'a;b'
ab = str.split(";");
[ 'a', 'b' ]
ab[0].length
2
ab[1].length
2
Die BOM wird also weder am Anfang noch am Ende noch zwischendrin und schon gar nicht von split
ausgefiltert. Zu Deinem Irrtum führt Folgendes: Was die Variablen enthalten ist eine Sache, was in der Console DARGESTELLT wird und entscheidet sich hier daran, welche Zeichen DARSTELLBAR sind.
trim würde übrigens die BOM wie auch andere nicht darstellbare Zeichen am Anfang und/oder Ende entfernen (Fortsetzung von obigem):
ab[0]=ab[0].trim()
'a'
ab[0].length
1