在我們的應用程序中對流氓AJAX請求進行故障診斷時,今天發生了一件奇怪的事情。我們將數據發送回服務器,使用jQuery.param
來構建請求字符串。空字符串+ null =「null」?
在一個場景中,餵食給帕拉姆函數的對象有一個空的選擇,所以它看起來是這樣的:
var myData = {
x : 1,
y : null
};
var params = jQuery.param(myData);
此代碼實際上是埋在骨幹集,但原理是一樣的。現在
,我完全被震驚了參數,當服務器接收,該變量y
是文字字符串"null"
,而不是null
。
一些挖後,我發現encodeURIComponent(null)
返回字符串"null"
和更有趣'' + null
產生"null"
爲好。這是在Chrome 23和Firefox 11上測試的。
最終被髮送到jQuery.param
函數的對象從參數構建到函數,而null是參數的完全有效值。我用y : param || ''
構建對象來解決這個問題,但我很好奇原生JS函數的明顯錯誤,以及爲什麼'' + null = "null"
,因爲它們通常被認爲是兩個不同的概念。
http://stackoverflow.com/a/10362142/362536 – Brad
由於@Brad。這在我的任何搜索中都沒有顯示出來。有趣的編程背後的例子,雖然我猜這個決定必須在做類型轉換時做出來 –
我會考慮'jQuery.param'中的一個錯誤。 '{foo:'bar'}'應該變成'?foo = bar','{foo:''}'應該變成'?foo =','{foo:null}'變成'?foo' 。 – zzzzBov