JavaScript文字列のバイト数を数える - encodeURIComponent版 にインスパイアされました。
HTML5 で追加された Blob オブジェクト を使うことで、マルチバイト文字も正確に高速にバイト数を求めることが出来ます。
prototype 汚染を気にしない人向け
str_size.js
String.prototype.size = function () {
return (new Blob([this], {type: "text/plain"})).size;
};
生理的に prototype 拡張が無理な人向け
getStrSize.js
function getStrSize(str) {
return (new Blob([str], {type: "text/plain"})).size;
}
結果
example.js
console.log( "あああa".size() ); // -> 10
console.log( "èî".size() ); // -> 4
console.log( "?野家".size() ); // -> 10
短文では、 Blob インスタンスの生成コストの分 encodeURIComponent版 よりも遅くなりますが、長文では威力を発揮します。
File API をサポートしていない IE9 以前では動かないので、 IE9 が切り捨てられる環境で使いましょう。
Blob の使えるブラウザ