summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/querystring.js23
-rw-r--r--test/simple/test-querystring.js7
2 files changed, 18 insertions, 12 deletions
diff --git a/lib/querystring.js b/lib/querystring.js
index aa3f3c7368..369316c203 100644
--- a/lib/querystring.js
+++ b/lib/querystring.js
@@ -128,9 +128,6 @@ var stringifyPrimitive = function(v) {
QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
sep = sep || '&';
eq = eq || '=';
- if (util.isNull(obj)) {
- obj = undefined;
- }
var encode = QueryString.escape;
if (options && typeof options.encodeURIComponent === 'function') {
@@ -138,16 +135,22 @@ QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
}
if (util.isObject(obj)) {
- return Object.keys(obj).map(function(k) {
+ var keys = Object.keys(obj);
+ var fields = [];
+
+ for (var i = 0; i < keys.length; i++) {
+ var k = keys[i];
+ var v = obj[k];
var ks = encode(stringifyPrimitive(k)) + eq;
- if (util.isArray(obj[k])) {
- return obj[k].map(function(v) {
- return ks + encode(stringifyPrimitive(v));
- }).join(sep);
+
+ if (util.isArray(v)) {
+ for (var j = 0; j < v.length; j++)
+ fields.push(ks + encode(stringifyPrimitive(v[j])));
} else {
- return ks + encode(stringifyPrimitive(obj[k]));
+ fields.push(ks + encode(stringifyPrimitive(v)));
}
- }).join(sep);
+ }
+ return fields.join(sep);
}
return '';
};
diff --git a/test/simple/test-querystring.js b/test/simple/test-querystring.js
index 3cee8081b5..c6390d7de7 100644
--- a/test/simple/test-querystring.js
+++ b/test/simple/test-querystring.js
@@ -57,7 +57,9 @@ var qsTestCases = [
valueOf: 'bar',
__defineGetter__: 'baz' }],
// See: https://github.com/joyent/node/issues/3058
- ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }]
+ ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }],
+ [null, '', {}],
+ [undefined, '', {}]
];
// [ wonkyQS, canonicalQS, obj ]
@@ -87,7 +89,8 @@ var qsWeirdObjects = [
[{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}],
[{n: null}, 'n=', {'n': ''}],
[{nan: NaN}, 'nan=', {'nan': ''}],
- [{inf: Infinity}, 'inf=', {'inf': ''}]
+ [{inf: Infinity}, 'inf=', {'inf': ''}],
+ [{a: [], b: []}, '', {}]
];
// }}}