書いてみたけど正規表現で str.replace(/^\s+|\s+$/g, "") した方が速いのでお蔵入り。
function trim(str) {
var b = 0;
var d = str.length;
while (b < d && str.charCodeAt(b) <= 0x20) b++;
while (b < d && str.charCodeAt(d - 1) <= 0x20) d--;
return str.substring(b, d);
}
ロジック自体は java.lang.String の trim() をパクったのでバグはないはず…。