私は今日、アプリケーションで不正なAJAXリクエストのトラブルシューティングを行っているときに奇妙な出来事に遭遇しました。jQuery.paramリクエスト文字列の作成に使用して、データをサーバーに送り返します。
あるシナリオでは、param関数にフィードされたオブジェクトにnullオプションがあったため、次のようになりました。
var myData = {
x : 1,
y : null
};
var params = jQuery.param(myData);
このコードは実際にはバックボーンコレクションに埋め込まれていますが、原則は同じです。
さて、サーバーが受け取ったときに、変数のパラメーターが。ではなくyリテラル文字列であったとき、私は完全にショックを受けました。"null"null
少し掘り下げた後、私はそれencodeURIComponent(null)が文字列を返し、"null"さらに興味深いことに同様に'' + null降伏することを発見しました。"null"これは、Chrome23とFirefox11でテストされました。
最終的にjQuery.param関数に送信されるオブジェクトは、関数への引数から構築され、nullはパラメーターの完全に有効な値です。オブジェクトをで構築するだけで回避できましたy : param || ''が、ネイティブJS関数の明らかな誤りと、'' + null = "null"一般に2つの異なる概念と見なされている理由について、興味があります。