空字符串+ null =“null”?

时间:2012-12-10 21:12:18

标签: javascript encodeuricomponent

今天我在应用程序中对流氓AJAX请求进行故障排除时遇到了奇怪的事情。我们使用jQuery.param将数据发送回服务器,以构建请求字符串。

在一个场景中,提供给param函数的对象有一个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",因为它们通常被认为是两个不同的概念

1 个答案:

答案 0 :(得分:3)

重载+运算符在执行其操作之前尝试将两个操作数转换为公共类型。如果任一操作数是字符串,它将两个操作数转换为字符串,然后执行字符串连接。

有关+运算符的行为,请参阅ecmascript定义:

  

如果Type(lprim)是String或Type(rprim)是String,那么   返回串联ToString(lprim)后跟ToString(rprim)的结果的字符串