7

JavaScriptでクエリ文字列値を取得するにはどうすればよいですか?を読んでいました。Stackoverflowで、最初の返信からのこのコードは、なぜ「vars.push()」がこのように使用されているのか疑問に思いました。

function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

しかし、これの代わりに:

var vars=[];
...
vars.push(hash[0]);
vars[hash[0]] = hash[1];

私は次のようにコードを書き直しました:

var vars={};
...
vars[hash[0]] = hash[1];

そしてそれは動作します。今の質問は次のとおりです。

  • なぜ誰かがその種の応答に配列を使用するのでしょうか?
  • そして、なぜ誰かがフォーマットを使用ARR.push(KEY)し、その後使用するのでしょうか?ARR[KEY]=VAL
4

4 に答える 4

2

これにより、varsキーの配列と辞書の両方になります。
私が考えることができる唯一の正当な理由は、辞書で 定義されていないクエリ パラメーターの順序を維持することです。

いずれにせよ、この関数は重複したクエリ パラメータを削除することに注意してください。最後の値のみが保持されます (ただし、キーは配列に複数回挿入されます)。

于 2012-04-07T08:52:19.763 に答える
2

この関数は、配列を配列とオブジェクトの両方として使用します。

配列として、クエリ文字列からのキーが含まれています。オブジェクトとして、クエリ文字列のキーから名前が付けられたプロパティが含まれ、プロパティにはクエリ文字列の値が含まれます。

たとえば、クエリ文字列が次のようになっている場合a=1&b=2、配列には "a" と "b" の 2 つの項目が含まれa、 value1とvalue の 2 つのプロパティがbあります2

于 2012-04-07T08:59:19.787 に答える
1

Push は、最後のキーとしてキーを押します。したがって、配列に論理的な順序を持たせることができます。

于 2012-04-07T08:53:11.630 に答える
1

push() は、引数を順番に配列の末尾に追加します。新しい配列を作成するのではなく、配列を直接変更します。push() およびそのコンパニオン メソッド pop() は、配列を使用して先入れ後出しスタックの機能を提供します。

于 2012-04-07T08:59:37.400 に答える