空字符串+ null ="null"?

Tho*_*nes 5 javascript encodeuricomponent

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

在一个场景中,提供给param函数的对象有一个null选项,所以它看起来像这样:

var myData = {
     x : 1,
     y : null
};
var params = jQuery.param(myData);
Run Code Online (Sandbox Code Playgroud)

这段代码实际上埋藏在骨干集合中,但原理是一样的.

现在,当服务器收到变量的参数y是文字字符串"null"而不是存在时,我感到非常震惊null.

经过一番挖掘后,我发现encodeURIComponent(null)返回字符串"null"并获得更有趣的'' + null收益"null".这在Chrome 23以及Firefox 11上进行了测试.

最终发送到jQuery.param函数的对象是从函数的参数构建的,而null是参数的完全有效值.我只是通过构建对象来解决它y : param || '',但我很好奇本机JS函数的明显错误,以及为什么'' + null = "null",因为它们通常被认为是两个不同的概念.

jba*_*bey 3

超载的+运算符在执行操作之前尝试将两个操作数转换为通用类型。如果任一操作数是字符串,则它将两个操作数都转换为字符串,然后执行字符串连接。

请参阅ecmascript定义了解运算符的行为+

如果 Type(lprim) 是 String 或 Type(rprim) 是 String,则返回 ToString(lprim) 和 ToString(rprim) 连接的结果字符串

  • EcmaScript 规范(第 15.1.3.4 节)指定encodeURIComponent() 所做的第一件事是将其参数转换为字符串。因此`null`变成了“null” (2认同)