22

JavaScript 文字列は 10 万文字を格納できますか? PHP からの文字列が JavaScript の変数に渡されるスクリプトを作成しました。ほぼ 10,000 文字に短縮された場合は問題なく動作しますが、長さが 100K を少し超える文字列全体を渡そうとすると、スクリプトが壊れます。ただし、エラーは見つかりませんでした。JavaScript変数の文字制限を増やす方法について、これに対する解決策はありますか? 私はただの初心者です。これに対する解決策を見つけることができる人がいれば幸いです。

4

3 に答える 3

32

ECMAScript 標準ECMA-262 (第 6 版、2015 年 6 月) は次のように述べています。

6.1.4 文字列型

String 型は、最大長 2 53 -1 要素までの 0 個以上の 16 ビット符号なし整数値 (「要素」) のすべての順序付けられたシーケンスのセットです。

したがって、9,007,199,254,740,991 文字または約 9,000 兆文字を使用する予定はありません。もちろん、18 PB のメモリ チャンクを割り当てることができないシステムに備える必要があります。これは、ECMAScript 実装の準拠には必要ないためです。

于 2015-11-17T22:53:44.653 に答える
12

質問は、仕様の制限ではなく、実際の制限について尋ねていると思います。そして、いいえ、それは常にあなたが持っているRAMの量ではありません. Linux Mint と x86_64 Firefox および x86_64 Chrome を実行している x86_64 24GB PC を使用していますが、私が遭遇した制限は次のとおりです。

  • Firefox 84 での 1,073,741,822 の制限
  • Chrome 87 での 536,870,888 の制限

それ以上の場合、Firefox は をスローしますUncaught RangeError: repeat count must be less than infinity and not overflow maximum string sizeが、Chrome は をスローしUncaught RangeError: Invalid string lengthます。次のスニペットを使用して、ブラウザで最大文字列長のバイナリ検索を実行します。

for (var startPow2 = 1; startPow2 < 9007199254740992; startPow2 *= 2)
    try {" ".repeat(startPow2);} catch(e) {
        break;
    }

var floor = Math.floor, mask = floor(startPow2 / 2);
while (startPow2 = floor(startPow2 / 2))
    try {
        " ".repeat(mask + startPow2);
        mask += startPow2; // the previous statement succeeded
    } catch(e) {}

console.log("The max string length for this browser is " + mask);

于 2021-01-04T22:31:30.123 に答える
7

文字列のサイズに関して、JS や PHP には理論上の制限はありません。

考えられる状況はいくつかあると思います。

まず、HTTP GET 経由で文字列を送信していないことを確認してください。GET には最大サイズがあり、Web サーバーに依存していると思います。

次に、POST を使用する場合は、php.ini で post_max_size を確認し、送信している文字列サイズと .htacccess ファイルよりも小さいかどうかを確認して、php_value post_max_size が小さすぎないかどうかを確認します。

3 番目に、php.ini で、スクリプトが使用できるメモリのサイズが memory_limit によって制限されていないことを確認します。

お役に立てれば。

于 2012-12-04T07:36:32.710 に答える