それはあなたの文字エンコーディングに依存するでしょう。ASCIIエンコーディングを使用する場合、str.lengthバイトになります。UTF-16を使用する場合、(str.length * 2)バイトになります。UTF-8を使用する場合は、文字列内の文字に依存します。(一部の文字は1バイトしか使用しませんが、他の文字は最大4バイトを使用する可能性があります。)Base64でエンコードされたデータを処理する場合、文字はすべてASCII範囲内にあるため、ディスク上でstr.lengthバイトを占有します。最初にデコードしてバイナリとして保存すると、(str.length * 3/4)バイトかかります。(Base64では、3つのコード化されていないバイトが4つのコード化されたバイトになります。)
ところで-JoelSpolskyの絶対最小すべてのソフトウェア開発者を絶対に読んでいない場合は、Unicodeと文字セットについて積極的に知っておく必要があります(言い訳はできません!)。すぐに読んでください。
http://www.joelonsoftware.com/articles/Unicode.html
更新:localStorageを使用している場合は、window.localStorage.lengthに精通していると思いますが、これは使用された量のみを示し、新しいデータが収まるかどうかは示しません。また、 Dive into HTML5、特にストレージに関するセクションを読むことを強くお勧めします。
http://diveintohtml5.ep.io/storage.html
書き込み以降に何かが変更されていない限り、localStorageではドメインあたり5MBに制限されており、ユーザーがそれを増やす方法がないため、何ができるかわかりません。