考虑的细节非常多,还是可以应用到项目中的,不需要在自己解析了

    校验是否支持URL对象
    https://github.com/zloirock/core-js/blob/master/packages/core-js/internals/native-url.js

    1. module.exports = !fails(function () {
    2. var url = new URL('b?a=1&b=2&c=3', 'http://a');
    3. var searchParams = url.searchParams;
    4. var result = '';
    5. url.pathname = 'c%20d';
    6. searchParams.forEach(function (value, key) {
    7. searchParams['delete']('b');
    8. result += key + value;
    9. });
    10. return (IS_PURE && !url.toJSON)
    11. || !searchParams.sort
    12. || url.href !== 'http://a/c%20d?a=1&c=3'
    13. || searchParams.get('c') !== '3'
    14. || String(new URLSearchParams('?a=1')) !== 'a=1'
    15. || !searchParams[ITERATOR]
    16. // throws in Edge
    17. || new URL('https://a@b').username !== 'a'
    18. || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
    19. // not punycoded in Edge
    20. || new URL('http://тест').host !== 'xn--e1aybc'
    21. // not escaped in Chrome 62-
    22. || new URL('http://a#б').hash !== '#%D0%B1'
    23. // fails in Chrome 66-
    24. || result !== 'a1c3'
    25. // throws in Safari
    26. || new URL('http://x', undefined).host !== 'x';
    27. });

    https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.url.js