summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/url.js10
-rw-r--r--test/parallel/test-url.js4
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/url.js b/lib/url.js
index bb11144f7a..8b9f92856d 100644
--- a/lib/url.js
+++ b/lib/url.js
@@ -60,6 +60,12 @@ const slashedProtocol = {
};
const querystring = require('querystring');
+// This constructor is used to store parsed query string values. Instantiating
+// this is faster than explicitly calling `Object.create(null)` to get a
+// "clean" empty object (tested with v8 v4.9).
+function ParsedQueryString() {}
+ParsedQueryString.prototype = Object.create(null);
+
function urlParse(url, parseQueryString, slashesDenoteHost) {
if (url instanceof Url) return url;
@@ -168,7 +174,7 @@ Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
}
} else if (parseQueryString) {
this.search = '';
- this.query = {};
+ this.query = new ParsedQueryString();
}
return this;
}
@@ -358,7 +364,7 @@ Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
} else if (parseQueryString) {
// no query string, but parseQueryString still requested
this.search = '';
- this.query = {};
+ this.query = new ParsedQueryString();
}
var firstIdx = (questionIdx !== -1 &&
diff --git a/test/parallel/test-url.js b/test/parallel/test-url.js
index 760303e98b..1499fb8733 100644
--- a/test/parallel/test-url.js
+++ b/test/parallel/test-url.js
@@ -927,7 +927,7 @@ var parseTestsWithQueryString = {
path: '/example',
href: '/example'
},
- '/example?query=value':{
+ '/example?query=value': {
protocol: null,
slashes: null,
auth: null,
@@ -951,6 +951,8 @@ for (const u in parseTestsWithQueryString) {
}
}
+ assert.notStrictEqual(Object.getPrototypeOf(actual.query), Object.prototype);
+
assert.deepEqual(actual, expected);
}