在我们的应用程序中对流氓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