- 自定义方法
- API方式(官网提供)
- throw
- indexOf
- split
- continue
- return
- undefined
- URLSearchParams
function cuttingPath(str = '', key = '') { // 判空处理 if (!str) throw new Error('at least one parameter is required.'); if (str.indexOf('?') !== -1) str = str.split('?')[1]; if (str.indexOf('&') !== -1) str = str.split('&'); let obj = {}; for (let i = 0; i < str.length; i++) { let item = str[i]; if (item.indexOf('=') === -1) continue; item = item.split('='); // 往obj对象中存储切割好的数据 obj[item[0]] = item[1]; } if (Object.keys(obj).length) { if (key === '') return obj; if (obj[key]) return obj[key]; } else { return undefined; } } let str = 'https://www.baidu.com/s?tn=02003390_23_hao_pg&wd=JavaScript路径切割&oq=JavaScript'; console.log(cuttingPath(str, 'tn')); // 02003390_23_hao_pg console.log(cuttingPath(str, '')); // {tn: '02003390_23_hao_pg', wd: 'JavaScript路径切割', oq: 'JavaScript'} console.log(cuttingPath('wd')); // undefined console.log(cuttingPath('')); // Uncaught Error: at least one parameter is required.
参数一必传,参数二为空字符串或不传时会返回对象或undefined。
API方式(官网提供)let str = 'https://example.com/?name=半晨&nickname=舒冬', intercept = new URLSearchParams(str.split('?')[1]); console.log(intercept.get('name')); // 半晨 console.log(intercept.get('nickname')); // 舒冬 console.log(intercept.get('age')); // null console.log(intercept.get('')); // null console.log(intercept.get()); // Uncaught TypeError: Failed to execute 'get' on 'URLSearchParams': 1 argument required, but only 0 present.throw
w3school
throw语句抛出(产生)错误。 当发生错误时,JavaScript通常会停止,并生成错误消息。 其技术术语是JavaScript会抛出(throw)错误。 throw语句允许您创建自定义错误。 其技术术语是抛出异常(exception)。 异常可以是JavaScript字符串、数字、布尔值或对象 如果将throw与try和catch一起使用,则可以控制程序流并生成自定义错误消息。
MDN
throw语句用来抛出一个用户自定义的异常。当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个catch块。如果调用者函数中没有catch块,程序将会终止。
indexOfMDN
indexOf()方法返回数组中第一次出现给定元素的下标,如果不存在则返回-1。
w3school
indexOf()方法返回值在字符串中第一次出现的位置。 如果未找到该值,则indexOf()方法返回-1。 indexOf()方法区分大小写。
splitMDN
split()方法接受一个模式,通过搜索模式将字符串分割成一个有序的子串列表,将这些子串放入一个数组,并返回该数组。
w3school
split()方法将字符串拆分为子字符串数组。 split()方法返回新数组,不会更改原始字符串。 如果(' ')用作分隔符,则字符串在单词之间进行拆分。
continuew3school
如果出现指定条件,则continue语句会中断一次迭代(在循环中),并继续循环中的下一次迭代。 continue和break语句之间的区别在于,continue语句不是跳出循环,而是跳过循环中的一次迭代。 但是,当执行continue语句时,对于不同类型的循环,它的行为会有所不同 在while循环中,测试条件,如果为真,则再次执行循环 在for循环中,首先计算增量表达式,然后测试条件以确定是否应该进行另一次迭代 continue语句也可以与可选的标签引用一起使用 continue语句只能在循环内使用。
MDN
continue声明终止当前循环或标记循环的当前迭代中的语句执行,并在下一次迭代时继续执行循环。 与break语句的区别在于,continue并不会终止循环的迭代。 在while循环中,控制流跳转回条件判断; 在for循环中,控制流跳转到更新语句。 continue语句可以包含一个可选的标号以控制程序跳转到指定循环的下一次迭代,而非当前循环。此时要求continue语句在对应的循环内部。
returnMDN
return语句终止函数的执行,并返回一个指定的值给函数调用者。
w3school
return语句停止函数的执行并从函数返回一个值。 当在函数体中使用return语句时,函数将会停止执行。如果指定一个值,则该值会被返回给函数调用者。
undefinedw3school
undefined属性表示变量没有被赋值,或者根本没有被声明。
MDN
全局属性undefined表示原始值undefined。它是一个JavaScript的原始数据类型。
URLSearchParamsMDN
URLSearchParams接口定义了一些实用的方法来处理URL的查询字符串。 一个实现了URLSearchParams的对象可以直接用在for…of结构中。