私は今日、アプリケーションで不正な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つの異なる概念と見なされている理由について、興味があります。