diff --git a/lib/internal/url.js b/lib/internal/url.js index 38842d5c4a125b..995e533013249c 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -672,8 +672,7 @@ class URLSearchParams { throw new TypeError('Value of `this` is not a URLSearchParams'); } if (arguments.length < 2) { - throw new TypeError( - 'Both `name` and `value` arguments need to be specified'); + throw new TypeError('"name" and "value" arguments must be specified'); } name = String(name); @@ -687,7 +686,7 @@ class URLSearchParams { throw new TypeError('Value of `this` is not a URLSearchParams'); } if (arguments.length < 1) { - throw new TypeError('The `name` argument needs to be specified'); + throw new TypeError('"name" argument must be specified'); } const list = this[searchParams]; @@ -708,8 +707,7 @@ class URLSearchParams { throw new TypeError('Value of `this` is not a URLSearchParams'); } if (arguments.length < 2) { - throw new TypeError( - 'Both `name` and `value` arguments need to be specified'); + throw new TypeError('"name" and "value" arguments must be specified'); } const list = this[searchParams]; @@ -749,7 +747,7 @@ class URLSearchParams { throw new TypeError('Value of `this` is not a URLSearchParams'); } if (arguments.length < 1) { - throw new TypeError('The `name` argument needs to be specified'); + throw new TypeError('"name" argument must be specified'); } const list = this[searchParams]; @@ -767,7 +765,7 @@ class URLSearchParams { throw new TypeError('Value of `this` is not a URLSearchParams'); } if (arguments.length < 1) { - throw new TypeError('The `name` argument needs to be specified'); + throw new TypeError('"name" argument must be specified'); } const list = this[searchParams]; @@ -786,7 +784,7 @@ class URLSearchParams { throw new TypeError('Value of `this` is not a URLSearchParams'); } if (arguments.length < 1) { - throw new TypeError('The `name` argument needs to be specified'); + throw new TypeError('"name" argument must be specified'); } const list = this[searchParams]; @@ -814,8 +812,8 @@ class URLSearchParams { if (!this || !(this instanceof URLSearchParams)) { throw new TypeError('Value of `this` is not a URLSearchParams'); } - if (arguments.length < 1) { - throw new TypeError('The `callback` argument needs to be specified'); + if (typeof callback !== 'function') { + throw new TypeError('"callback" argument must be a function'); } let list = this[searchParams]; diff --git a/test/parallel/test-whatwg-url-searchparams.js b/test/parallel/test-whatwg-url-searchparams.js index 54743b97a31da9..9a9fbb0452155d 100644 --- a/test/parallel/test-whatwg-url-searchparams.js +++ b/test/parallel/test-whatwg-url-searchparams.js @@ -44,6 +44,20 @@ n = 0; for (val of sp.values()) { assert.strictEqual(val, String(values[n++])); } +n = 0; +sp.forEach(function(val, key, obj) { + assert.strictEqual(this, undefined); + assert.strictEqual(key, 'a'); + assert.strictEqual(val, String(values[n++])); + assert.strictEqual(obj, sp); +}); +sp.forEach(function() { + assert.strictEqual(this, m); +}, m); +assert.throws(() => sp.forEach(), + /^TypeError: "callback" argument must be a function$/); +assert.throws(() => sp.forEach(1), + /^TypeError: "callback" argument must be a function$/); m.search = '?a=a&b=b'; assert.strictEqual(sp.toString(), 'a=a&b=b');