Skip to content

Commit 949ff08

Browse files
author
Eran Hammer
committed
Merge pull request #34 from hapijs/33/hasOwnProperty
use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty
2 parents 360e2b0 + 6892a8d commit 949ff08

File tree

3 files changed

+38
-47
lines changed

3 files changed

+38
-47
lines changed

lib/parse.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,16 @@ module.exports = function (str, options) {
138138
options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;
139139
options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;
140140

141-
var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : Utils.clone(str);
141+
var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str;
142142
var obj = {};
143143

144144
// Iterate over the keys and setup the new object
145-
//
146-
for (var key in tempObj) {
147-
if (tempObj.hasOwnProperty(key)) {
148-
var newObj = internals.parseKeys(key, tempObj[key], options);
149-
obj = Utils.merge(obj, newObj);
150-
}
145+
146+
var keys = Object.keys(tempObj);
147+
for (var i = 0, il = keys.length; i < il; ++i) {
148+
var key = keys[i];
149+
var newObj = internals.parseKeys(key, tempObj[key], options);
150+
obj = Utils.merge(obj, newObj);
151151
}
152152

153153
return Utils.compact(obj);

lib/utils.js

+5-38
Original file line numberDiff line numberDiff line change
@@ -20,39 +20,6 @@ exports.arrayToObject = function (source) {
2020
};
2121

2222

23-
exports.clone = function (source, refs) {
24-
25-
if (typeof source !== 'object' ||
26-
source === null) {
27-
28-
return source;
29-
}
30-
31-
if (exports.isBuffer(source)) {
32-
return source.toString();
33-
}
34-
35-
refs = refs || [];
36-
37-
var lookup = refs.indexOf(source);
38-
if (lookup !== -1) {
39-
return refs[lookup];
40-
}
41-
42-
var copy = Array.isArray(source) ? [] : source;
43-
44-
refs.push(source);
45-
46-
for (var i in source) {
47-
if (source.hasOwnProperty(i)) {
48-
copy[i] = exports.clone(source[i], refs);
49-
}
50-
}
51-
52-
return copy;
53-
};
54-
55-
5623
exports.merge = function (target, source) {
5724

5825
if (!source) {
@@ -93,7 +60,7 @@ exports.merge = function (target, source) {
9360
typeof value === 'object') {
9461

9562
if (!target[key]) {
96-
target[key] = exports.clone(value);
63+
target[key] = value;
9764
}
9865
else {
9966
target[key] = exports.merge(target[key], value);
@@ -146,10 +113,10 @@ exports.compact = function (obj, refs) {
146113
return compacted;
147114
}
148115

149-
for (var key in obj) {
150-
if (obj.hasOwnProperty(key)) {
151-
obj[key] = exports.compact(obj[key], refs);
152-
}
116+
var keys = Object.keys(obj);
117+
for (var i = 0, il = keys.length; i < il; ++i) {
118+
var key = keys[i];
119+
obj[key] = exports.compact(obj[key], refs);
153120
}
154121

155122
return obj;

test/parse.js

+26-2
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,10 @@ describe('#parse', function () {
205205
done();
206206
});
207207

208-
it('parses buffers to strings', function (done) {
208+
it('parses buffers correctly', function (done) {
209209

210210
var b = new Buffer('test');
211-
expect(Qs.parse({ a: b })).to.deep.equal({ a: b.toString() });
211+
expect(Qs.parse({ a: b })).to.deep.equal({ a: b });
212212
done();
213213
});
214214

@@ -356,4 +356,28 @@ describe('#parse', function () {
356356
expect(parsed.foo.baz).to.deep.equal(a);
357357
done();
358358
});
359+
360+
it('parses plain objects correctly', function (done) {
361+
362+
var a = Object.create(null);
363+
a.b = 'c';
364+
365+
expect(Qs.parse(a)).to.deep.equal({ b: 'c' });
366+
expect(Qs.parse({ a: a })).to.deep.equal({ a: { b: 'c' } });
367+
done();
368+
});
369+
370+
it('parses dates correctly', function (done) {
371+
372+
var now = new Date();
373+
expect(Qs.parse({ a: now })).to.deep.equal({ a: now });
374+
done();
375+
});
376+
377+
it('parses regular expressions correctly', function (done) {
378+
379+
var re = /^test$/;
380+
expect(Qs.parse({ a: re })).to.deep.equal({ a: re });
381+
done();
382+
});
359383
});

0 commit comments

Comments
 (0)