summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author迷渡 <justjavac@gmail.com>2019-06-17 23:39:23 +0800
committerRyan Dahl <ry@tinyclouds.org>2019-06-17 08:39:23 -0700
commita95319074240a869dce088fa580e46a067a8e7d1 (patch)
tree1e5f4d3445283b29f303cae38f14b7baae31e94f
parent76329cf610af1612d4e9c562a1ee3a4dd6082a37 (diff)
fix urlSearchParams custom symbol iterator (#2537)
-rw-r--r--js/url_search_params.ts11
-rw-r--r--js/url_search_params_test.ts9
2 files changed, 13 insertions, 7 deletions
diff --git a/js/url_search_params.ts b/js/url_search_params.ts
index 666ba6951..8e122191d 100644
--- a/js/url_search_params.ts
+++ b/js/url_search_params.ts
@@ -12,16 +12,11 @@ export class URLSearchParams {
return;
}
- if (Array.isArray(init)) {
+ if (Array.isArray(init) || isIterable(init)) {
this._handleArrayInitialization(init);
return;
}
- if (isIterable(init)) {
- this.params = [...init];
- return;
- }
-
if (Object(init) !== init) {
return;
}
@@ -285,7 +280,9 @@ export class URLSearchParams {
}
}
- private _handleArrayInitialization(init: string[][]): void {
+ private _handleArrayInitialization(
+ init: string[][] | Iterable<[string, string]>
+ ): void {
// Overload: sequence<sequence<USVString>>
for (const tuple of init) {
// If pair does not contain exactly two items, then throw a TypeError.
diff --git a/js/url_search_params_test.ts b/js/url_search_params_test.ts
index e270dd7ff..08b0c5a1f 100644
--- a/js/url_search_params_test.ts
+++ b/js/url_search_params_test.ts
@@ -227,3 +227,12 @@ test(function urlSearchParamsCustomSymbolIterator(): void {
const params1 = new URLSearchParams((params as unknown) as string[][]);
assertEquals(params1.get("a"), "b");
});
+
+test(function urlSearchParamsCustomSymbolIteratorWithNonStringParams(): void {
+ const params = {};
+ params[Symbol.iterator] = function*(): IterableIterator<[number, number]> {
+ yield [1, 2];
+ };
+ const params1 = new URLSearchParams((params as unknown) as string[][]);
+ assertEquals(params1.get("1"), "2");
+});