Строка не преобразуется в массив, над ней просто выполняются те же операции, что и с массивом. map, например, имеет вид
function(fn, thisObj) {
var result = [];
for (var i = 0, l = this.length; i < l; i++) {
if (i in this) {
result[i] = fn.call(thisObj, this[i], i, this);
}
}
return result;
};
У строк есть свойство length, к символам можно обращаться через оператор [].