# Location 对象ï¼URL 对象ï¼URLSearchParams 对象
URL æ¯äºèç½çåºç¡è®¾æ½ä¹ä¸ãæµè§å¨æä¾äºä¸äºåç对象ï¼ç¨æ¥ç®¡ç URLã
## Location 对象
`Location`å¯¹è±¡æ¯æµè§å¨æä¾çåçå¯¹è±¡ï¼æä¾ URL ç¸å
³çä¿¡æ¯åæä½æ¹æ³ãéè¿`window.location`å`document.location`屿§ï¼å¯ä»¥æ¿å°è¿ä¸ªå¯¹è±¡ã
### 屿§
`Location`对象æä¾ä»¥ä¸å±æ§ã
- `Location.href`ï¼æ´ä¸ª URLã
- `Location.protocol`ï¼å½å URL çåè®®ï¼å
æ¬åå·ï¼`:`ï¼ã
- `Location.host`ï¼ä¸»æºï¼å
æ¬åå·ï¼`:`ï¼å端å£ï¼é»è®¤ç80端å£å443端å£ä¼çç¥ï¼ã
- `Location.hostname`ï¼ä¸»æºåï¼ä¸å
æ¬ç«¯å£ã
- `Location.port`ï¼ç«¯å£å·ã
- `Location.pathname`ï¼URL çè·¯å¾é¨åï¼ä»æ ¹è·¯å¾`/`å¼å§ã
- `Location.search`ï¼æ¥è¯¢å符串é¨åï¼ä»é®å·`?`å¼å§ã
- `Location.hash`ï¼ç段å符串é¨åï¼ä»`#`å¼å§ã
- `Location.username`ï¼åååé¢çç¨æ·åã
- `Location.password`ï¼åååé¢çå¯ç ã
- `Location.origin`ï¼URL çåè®®ã主æºåå端å£ã
```javascript
// å½åç½å为
// http://user:[email protected]:4097/path/a.html?x=111#part1
document.location.href
// "http://user:[email protected]:4097/path/a.html?x=111#part1"
document.location.protocol
// "http:"
document.location.host
// "www.example.com:4097"
document.location.hostname
// "www.example.com"
document.location.port
// "4097"
document.location.pathname
// "/path/a.html"
document.location.search
// "?x=111"
document.location.hash
// "#part1"
document.location.username
// "user"
document.location.password
// "passwd"
document.location.origin
// "http://user:[email protected]:4097"
```
è¿äºå±æ§éé¢ï¼åªæ`origin`屿§æ¯åªè¯»çï¼å
¶ä»å±æ§é½å¯åã
注æï¼å¦æå¯¹`Location.href`åå
¥æ°ç URL å°åï¼æµè§å¨ä¼ç«å»è·³è½¬å°è¿ä¸ªæ°å°åã
```javascript
// è·³è½¬å°æ°ç½å
document.location.href = 'http://www.example.com';
```
è¿ä¸ªç¹æ§å¸¸å¸¸ç¨äºè®©ç½é¡µèªå¨æ»å¨å°æ°çéç¹ã
```javascript
document.location.href = '#top';
// çåäº
document.location.hash = '#top';
```
ç´æ¥æ¹å`location`ï¼ç¸å½äºåå
¥`href`屿§ã
```javascript
document.location = 'http://www.example.com';
// çåäº
document.location.href = 'http://www.example.com';
```
å¦å¤ï¼`Location.href`屿§æ¯æµè§å¨å¯ä¸å
许跨ååå
¥ç屿§ï¼å³éåæºççªå£å¯ä»¥æ¹åå¦ä¸ä¸ªçªå£ï¼æ¯å¦åçªå£ä¸ç¶çªå£ï¼ç`Location.href`屿§ï¼å¯¼è´åè
çç½å跳转ã`Location`çå
¶ä»å±æ§é½ä¸å
许跨ååå
¥ã
### æ¹æ³
**ï¼1ï¼Location.assign()**
`assign`æ¹æ³æ¥åä¸ä¸ª URL å符串ä½ä¸ºåæ°ï¼ä½¿å¾æµè§å¨ç«å»è·³è½¬å°æ°ç URLã妿忰䏿¯ææç URL å符串ï¼å伿¥éã
```javascript
// è·³è½¬å°æ°çç½å
document.location.assign('http://www.example.com')
```
**ï¼2ï¼Location.replace()**
`replace`æ¹æ³æ¥åä¸ä¸ª URL å符串ä½ä¸ºåæ°ï¼ä½¿å¾æµè§å¨ç«å»è·³è½¬å°æ°ç URLã妿忰䏿¯ææç URL å符串ï¼å伿¥éã
å®ä¸`assign`æ¹æ³çå·®å¼å¨äºï¼`replace`ä¼å¨æµè§å¨çæµè§åå²`History`éé¢å é¤å½åç½åï¼ä¹å°±æ¯è¯´ï¼ä¸æ¦ä½¿ç¨äºè¯¥æ¹æ³ï¼åéæé®å°±æ æ³åå°å½åç½é¡µäºï¼ç¸å½äºå¨æµè§åå²éé¢ï¼ä½¿ç¨æ°ç URL æ¿æ¢äºèç URLãå®çä¸ä¸ªåºç¨æ¯ï¼å½èæ¬åç°å½åæ¯ç§»å¨è®¾å¤æ¶ï¼å°±ç«å»è·³è½¬å°ç§»å¨çç½é¡µã
```javascript
// è·³è½¬å°æ°çç½å
document.location.replace('http://www.example.com')
```
**ï¼3ï¼Location.reload()**
`reload`æ¹æ³ä½¿å¾æµè§å¨éæ°å è½½å½åç½åï¼ç¸å½äºæä¸æµè§å¨çå·æ°æé®ã
宿¥åä¸ä¸ªå¸å°å¼ä½ä¸ºåæ°ãå¦æåæ°ä¸º`true`ï¼æµè§å¨å°åæå¡å¨éæ°è¯·æ±è¿ä¸ªç½é¡µï¼å¹¶ä¸éæ°å è½½åï¼ç½é¡µå°æ»å¨å°å¤´é¨ï¼å³`scrollTop === 0`ï¼ã妿忰æ¯`false`æä¸ºç©ºï¼æµè§å¨å°ä»æ¬å°ç¼åéæ°å 载该ç½é¡µï¼å¹¶ä¸éæ°å è½½åï¼ç½é¡µçè§å£ä½ç½®æ¯éæ°å è½½åçä½ç½®ã
```javascript
// åæå¡å¨éæ°è¯·æ±å½åç½å
window.location.reload(true);
```
**ï¼4ï¼Location.toString()**
`toString`æ¹æ³è¿åæ´ä¸ª URL å符串ï¼ç¸å½äºè¯»å`Location.href`屿§ã
## URL çç¼ç åè§£ç
ç½é¡µç URL åªè½å
å«åæ³çå符ãåæ³å符åæä¸¤ç±»ã
- URL å
å符ï¼åå·ï¼`;`ï¼ï¼éå·ï¼`,`ï¼ï¼ææ ï¼`/`ï¼ï¼é®å·ï¼`?`ï¼ï¼åå·ï¼`:`ï¼ï¼atï¼`@`ï¼ï¼`&`ï¼çå·ï¼`=`ï¼ï¼å å·ï¼`+`ï¼ï¼ç¾å
符å·ï¼`$`ï¼ï¼äºå·ï¼`#`ï¼
- è¯ä¹å符ï¼`a-z`ï¼`A-Z`ï¼`0-9`ï¼è¿è¯å·ï¼`-`ï¼ï¼ä¸å线ï¼`_`ï¼ï¼ç¹ï¼`.`ï¼ï¼æå¹å·ï¼`!`ï¼ï¼æ³¢æµªçº¿ï¼`~`ï¼ï¼æå·ï¼`*`ï¼ï¼åå¼å·ï¼`'`ï¼ï¼åæ¬å·ï¼`()`ï¼
é¤äºä»¥ä¸å符ï¼å
¶ä»å符åºç°å¨ URL ä¹ä¸é½å¿
须转ä¹ï¼è§åæ¯æ ¹æ®æä½ç³»ç»çé»è®¤ç¼ç ï¼å°æ¯ä¸ªåè转为ç¾åå·ï¼`%`ï¼å ä¸ä¸¤ä¸ªå¤§åçåå
è¿å¶åæ¯ã
æ¯å¦ï¼UTF-8 çæä½ç³»ç»ä¸ï¼`http://www.example.com/q=æ¥è`è¿ä¸ª URL ä¹ä¸ï¼æ±åâæ¥èâ䏿¯ URL çåæ³åç¬¦ï¼æä»¥è¢«æµè§å¨èªå¨è½¬æ`http://www.example.com/q=%E6%98%A5%E8%8A%82`ãå
¶ä¸ï¼âæ¥â转æäº`%E6%98%A5`ï¼âèâ转æäº`%E8%8A%82`ãè¿æ¯å ä¸ºâæ¥âåâèâç UTF-8 ç¼ç å嫿¯`E6 98 A5`å`E8 8A 82`ï¼å°æ¯ä¸ªåèåé¢å ä¸ç¾åå·ï¼å°±ææäº URL ç¼ç ã
JavaScript æä¾å个 URL çç¼ç /è§£ç æ¹æ³ã
- `encodeURI()`
- `encodeURIComponent()`
- `decodeURI()`
- `decodeURIComponent()`
### encodeURI()
`encodeURI()`æ¹æ³ç¨äºè½¬ç æ´ä¸ª URLãå®çåæ°æ¯ä¸ä¸ªå符串ï¼ä»£è¡¨æ´ä¸ª URLãå®ä¼å°å
å符åè¯ä¹å符ä¹å¤çå符ï¼é½è¿è¡è½¬ä¹ã
```javascript
encodeURI('http://www.example.com/q=æ¥è')
// "http://www.example.com/q=%E6%98%A5%E8%8A%82"
```
### encodeURIComponent()
`encodeURIComponent()`æ¹æ³ç¨äºè½¬ç URL çç»æé¨åï¼ä¼è½¬ç é¤äºè¯ä¹å符ä¹å¤çææå符ï¼å³å
å符ä¹ä¼è¢«è½¬ç ãæä»¥ï¼å®ä¸è½ç¨äºè½¬ç æ´ä¸ª URLã宿¥åä¸ä¸ªåæ°ï¼å°±æ¯ URL ççæ®µã
```javascript
encodeURIComponent('æ¥è')
// "%E6%98%A5%E8%8A%82"
encodeURIComponent('http://www.example.com/q=æ¥è')
// "http%3A%2F%2Fwww.example.com%2Fq%3D%E6%98%A5%E8%8A%82"
```
ä¸é¢ä»£ç ä¸ï¼`encodeURIComponent()`ä¼è¿ URL å
å符ä¸èµ·è½¬ä¹ï¼æä»¥å¦æè½¬ç æ´ä¸ª URL å°±ä¼åºéã
### decodeURI()
`decodeURI()`æ¹æ³ç¨äºæ´ä¸ª URL çè§£ç ã宿¯`encodeURI()`æ¹æ³çéè¿ç®ã宿¥åä¸ä¸ªåæ°ï¼å°±æ¯è½¬ç åç URLã
```javascript
decodeURI('http://www.example.com/q=%E6%98%A5%E8%8A%82')
// "http://www.example.com/q=æ¥è"
```
### decodeURIComponent()
`decodeURIComponent()`ç¨äºURL çæ®µçè§£ç ã宿¯`encodeURIComponent()`æ¹æ³çéè¿ç®ã宿¥åä¸ä¸ªåæ°ï¼å°±æ¯è½¬ç åç URL çæ®µã
```javascript
decodeURIComponent('%E6%98%A5%E8%8A%82')
// "æ¥è"
```
## URL 对象
`URL`å¯¹è±¡æ¯æµè§å¨çåç对象ï¼å¯ä»¥ç¨æ¥æé ãè§£æåç¼ç URLãä¸è¬æ
åµä¸ï¼éè¿`window.URL`å¯ä»¥æ¿å°è¿ä¸ªå¯¹è±¡ã
``å
ç´ å``å
ç´ é½é¨ç½²äºè¿ä¸ªæ¥å£ãè¿å°±æ¯è¯´ï¼å®ä»¬ç DOM èç¹å¯¹è±¡å¯ä»¥ä½¿ç¨ URL çå®ä¾å±æ§åæ¹æ³ã
```javascript
var a = document.createElement('a');
a.href = 'http://example.com/?foo=1';
a.hostname // "example.com"
a.search // "?foo=1"
```
ä¸é¢ä»£ç ä¸ï¼`a`æ¯``å
ç´ ç DOM èç¹å¯¹è±¡ãå¯ä»¥å¨è¿ä¸ªå¯¹è±¡ä¸ä½¿ç¨ URL çå®ä¾å±æ§ï¼æ¯å¦`hostname`å`search`ã
### æé 彿°
`URL`对象æ¬èº«æ¯ä¸ä¸ªæé 彿°ï¼å¯ä»¥çæ URL å®ä¾ã
宿¥åä¸ä¸ªè¡¨ç¤º URL çå符串ä½ä¸ºåæ°ã妿忰䏿¯åæ³ç URLï¼ä¼æ¥éã
```javascript
var url = new URL('http://www.example.com/index.html');
url.href
// "http://www.example.com/index.html"
```
妿忰æ¯å¦ä¸ä¸ª URL å®ä¾ï¼æé 彿°ä¼èªå¨è¯»å该å®ä¾ç`href`屿§ï¼ä½ä¸ºå®é
åæ°ã
妿 URL å符串æ¯ä¸ä¸ªç¸å¯¹è·¯å¾ï¼é£ä¹éè¦è¡¨ç¤ºç»å¯¹è·¯å¾ç第äºä¸ªåæ°ï¼ä½ä¸ºè®¡ç®åºåã
```javascript
var url1 = new URL('index.html', 'http://example.com');
url1.href
// "http://example.com/index.html"
var url2 = new URL('page2.html', 'http://example.com/page1.html');
url2.href
// "http://example.com/page2.html"
var url3 = new URL('..', 'http://example.com/a/b.html')
url3.href
// "http://example.com/"
```
ä¸é¢ä»£ç ä¸ï¼è¿åç URL å®ä¾çè·¯å¾é½æ¯å¨ç¬¬äºä¸ªåæ°çåºç¡ä¸ï¼åæ¢å°ç¬¬ä¸ä¸ªåæ°å¾å°çãæåä¸ä¸ªä¾åéé¢ï¼ç¬¬ä¸ä¸ªåæ°æ¯`..`ï¼è¡¨ç¤ºä¸å±è·¯å¾ã
### å®ä¾å±æ§
URL å®ä¾ç屿§ä¸`Location`对象ç屿§åºæ¬ä¸è´ï¼è¿åå½å URL çä¿¡æ¯ã
- URL.hrefï¼è¿åæ´ä¸ª URL
- URL.protocolï¼è¿ååè®®ï¼ä»¥åå·`:`ç»å°¾
- URL.hostnameï¼è¿ååå
- URL.hostï¼è¿åååä¸ç«¯å£ï¼å
å«`:`å·ï¼é»è®¤ç80å443端å£ä¼çç¥
- URL.portï¼è¿å端å£
- URL.originï¼è¿ååè®®ãååå端å£
- URL.pathnameï¼è¿åè·¯å¾ï¼ä»¥ææ `/`å¼å¤´
- URL.searchï¼è¿åæ¥è¯¢å符串ï¼ä»¥é®å·`?`å¼å¤´
- URL.searchParamsï¼è¿åä¸ä¸ª`URLSearchParams`å®ä¾ï¼è¯¥å±æ§æ¯`Location`对象没æç
- URL.hashï¼è¿åçæ®µè¯å«ç¬¦ï¼ä»¥äºå·`#`å¼å¤´
- URL.passwordï¼è¿ååååé¢çå¯ç
- URL.usernameï¼è¿ååååé¢çç¨æ·å
```javascript
var url = new URL('http://user:[email protected]:4097/path/a.html?x=111#part1');
url.href
// "http://user:[email protected]:4097/path/a.html?x=111#part1"
url.protocol
// "http:"
url.hostname
// "www.example.com"
url.host
// "www.example.com:4097"
url.port
// "4097"
url.origin
// "http://www.example.com:4097"
url.pathname
// "/path/a.html"
url.search
// "?x=111"
url.searchParams
// URLSearchParams {}
url.hash
// "#part1"
url.password
// "passwd"
url.username
// "user"
```
è¿äºå±æ§éé¢ï¼åªæ`origin`屿§æ¯åªè¯»çï¼å
¶ä»å±æ§é½å¯åã
```javascript
var url = new URL('http://example.com/index.html#part1');
url.pathname = 'index2.html';
url.href // "http://example.com/index2.html#part1"
url.hash = '#part2';
url.href // "http://example.com/index2.html#part2"
```
ä¸é¢ä»£ç ä¸ï¼æ¹å URL å®ä¾ç`pathname`屿§å`hash`屿§ï¼é½ä¼å®æ¶åæ å¨ URL å®ä¾å½ä¸ã
### éææ¹æ³
**ï¼1ï¼URL.createObjectURL()**
`URL.createObjectURL`æ¹æ³ç¨æ¥ä¸ºä¸ä¼ /ä¸è½½çæä»¶ãæµåªä½æä»¶çæä¸ä¸ª URL å符串ãè¿ä¸ªå符串代表äº`File`对象æ`Blob`对象ç URLã
```javascript
// HTML 代ç å¦ä¸
//
//
var div = document.getElementById('display');
function handleFiles(files) {
for (var i = 0; i < files.length; i++) {
var img = document.createElement('img');
img.src = window.URL.createObjectURL(files[i]);
div.appendChild(img);
}
}
```
ä¸é¢ä»£ç ä¸ï¼`URL.createObjectURL`æ¹æ³ç¨æ¥ä¸ºä¸ä¼ çæä»¶çæä¸ä¸ª URL å符串ï¼ä½ä¸º``å
ç´ çå¾çæ¥æºã
è¯¥æ¹æ³çæç URL å°±åä¸é¢çæ ·åã
```javascript
blob:http://localhost/c745ef73-ece9-46da-8f66-ebes574789b1
```
注æï¼æ¯æ¬¡ä½¿ç¨`URL.createObjectURL`æ¹æ³ï¼é½ä¼å¨å
åéé¢çæä¸ä¸ª URL å®ä¾ã妿ä¸åéè¦è¯¥æ¹æ³çæç URL å符串ï¼ä¸ºäºèçå
åï¼å¯ä»¥ä½¿ç¨`URL.revokeObjectURL()`æ¹æ³éæ¾è¿ä¸ªå®ä¾ã
**ï¼2ï¼URL.revokeObjectURL()**
`URL.revokeObjectURL`æ¹æ³ç¨æ¥éæ¾`URL.createObjectURL`æ¹æ³çæç URL å®ä¾ãå®çåæ°å°±æ¯`URL.createObjectURL`æ¹æ³è¿åç URL å符串ã
ä¸é¢ä¸ºä¸ä¸æ®µç示ä¾å ä¸`URL.revokeObjectURL()`ã
```javascript
var div = document.getElementById('display');
function handleFiles(files) {
for (var i = 0; i < files.length; i++) {
var img = document.createElement('img');
img.src = window.URL.createObjectURL(files[i]);
div.appendChild(img);
img.onload = function() {
window.URL.revokeObjectURL(this.src);
}
}
}
```
ä¸é¢ä»£ç ä¸ï¼ä¸æ¦å¾çå è½½æå以åï¼ä¸ºæ¬å°æä»¶çæç URL å符串就没ç¨äºï¼äºæ¯å¯ä»¥å¨`img.onload`åè°å½æ°éé¢ï¼éè¿`URL.revokeObjectURL`æ¹æ³å¸è½½è¿ä¸ª URL å®ä¾ã
## URLSearchParams 对象
### æ¦è¿°
`URLSearchParams`å¯¹è±¡æ¯æµè§å¨çåç对象ï¼ç¨æ¥æé ãè§£æåå¤ç URL çæ¥è¯¢å符串ï¼å³ URL é®å·åé¢çé¨åï¼ã
宿¬èº«ä¹æ¯ä¸ä¸ªæé 彿°ï¼å¯ä»¥çæå®ä¾ãåæ°å¯ä»¥ä¸ºæ¥è¯¢å符串ï¼èµ·é¦çé®å·`?`ææ²¡æé½è¡ï¼ä¹å¯ä»¥æ¯å¯¹åºæ¥è¯¢åç¬¦ä¸²çæ°ç»æå¯¹è±¡ã
```javascript
// æ¹æ³ä¸ï¼ä¼ å
¥å符串
var params = new URLSearchParams('?foo=1&bar=2');
// çåäº
var params = new URLSearchParams(document.location.search);
// æ¹æ³äºï¼ä¼ å
¥æ°ç»
var params = new URLSearchParams([['foo', 1], ['bar', 2]]);
// æ¹æ³ä¸ï¼ä¼ å
¥å¯¹è±¡
var params = new URLSearchParams({'foo' : 1 , 'bar' : 2});
```
`URLSearchParams`ä¼å¯¹æ¥è¯¢å符串èªå¨ç¼ç ã
```javascript
var params = new URLSearchParams({'foo': 'ä½ å¥½'});
params.toString() // "foo=%E4%BD%A0%E5%A5%BD"
```
ä¸é¢ä»£ç ä¸ï¼`foo`ç弿¯æ±åï¼`URLSearchParams`对å
¶èªå¨è¿è¡ URL ç¼ç ã
æµè§å¨åæå¡å¨åéè¡¨åæ°æ®æ¶ï¼å¯ä»¥ç´æ¥ä½¿ç¨`URLSearchParams`å®ä¾ä½ä¸ºè¡¨åæ°æ®ã
```javascript
const params = new URLSearchParams({foo: 1, bar: 2});
fetch('https://example.com/api', {
method: 'POST',
body: params
}).then(...)
```
ä¸é¢ä»£ç ä¸ï¼`fetch`å½ä»¤åæå¡å¨åéå½ä»¤æ¶ï¼å¯ä»¥ç´æ¥ä½¿ç¨`URLSearchParams`å®ä¾ã
`URLSearchParams`å¯ä»¥ä¸`URL`æ¥å£ç»å使ç¨ã
```javascript
var url = new URL(window.location);
var foo = url.searchParams.get('foo') || 'somedefault';
```
ä¸é¢ä»£ç ä¸ï¼URL å®ä¾ç`searchParams`屿§å°±æ¯ä¸ä¸ª`URLSearchParams`å®ä¾ï¼æä»¥å¯ä»¥ä½¿ç¨`URLSearchParams`æ¥å£ç`get`æ¹æ³ã
DOM ç`a`å
ç´ èç¹ç`searchParams`屿§ï¼å°±æ¯ä¸ä¸ª`URLSearchParams`å®ä¾ã
```javascript
var a = document.createElement('a');
a.href = 'https://example.com?filter=api';
a.searchParams.get('filter') // "api"
```
`URLSearchParams`å®ä¾æéå卿¥å£ï¼å¯ä»¥ç¨`for...of`循ç¯éåï¼è¯¦è§ãES6 æ åå
¥é¨ãçãIteratorãä¸ç« ï¼ã
```javascript
var params = new URLSearchParams({'foo': 1 , 'bar': 2});
for (var p of params) {
console.log(p[0] + ': ' + p[1]);
}
// foo: 1
// bar: 2
```
`URLSearchParams`没æå®ä¾å±æ§ï¼åªæå®ä¾æ¹æ³ã
### URLSearchParams.toString()
`toString`æ¹æ³è¿åå®ä¾çå符串形å¼ã
```javascript
var url = new URL('https://example.com?foo=1&bar=2');
var params = new URLSearchParams(url.search);
params.toString() // "foo=1&bar=2'
```
é£ä¹éè¦å符串çåºåï¼ä¼èªå¨è°ç¨`toString`æ¹æ³ã
```javascript
var params = new URLSearchParams({version: 2.0});
window.location.href = location.pathname + '?' + params;
```
ä¸é¢ä»£ç ä¸ï¼`location.href`èµå¼æ¶ï¼å¯ä»¥ç´æ¥ä½¿ç¨`params`对象ãè¿æ¶å°±ä¼èªå¨è°ç¨`toString`æ¹æ³ã
### URLSearchParams.append()
`append`æ¹æ³ç¨æ¥è¿½å ä¸ä¸ªæ¥è¯¢åæ°ã宿¥åä¸¤ä¸ªåæ°ï¼ç¬¬ä¸ä¸ªä¸ºé®åï¼ç¬¬äºä¸ªä¸ºé®å¼ï¼æ²¡æè¿åå¼ã
```javascript
var params = new URLSearchParams({'foo': 1 , 'bar': 2});
params.append('baz', 3);
params.toString() // "foo=1&bar=2&baz=3"
```
`append`æ¹æ³ä¸ä¼è¯å«æ¯å¦é®åå·²ç»åå¨ã
```javascript
var params = new URLSearchParams({'foo': 1 , 'bar': 2});
params.append('foo', 3);
params.toString() // "foo=1&bar=2&foo=3"
```
ä¸é¢ä»£ç ä¸ï¼æ¥è¯¢å符串éé¢`foo`å·²ç»åå¨äºï¼ä½æ¯`append`ä¾ç¶ä¼è¿½å ä¸ä¸ªååé®ã
### URLSearchParams.delete()
`delete`æ¹æ³ç¨æ¥å 餿å®çæ¥è¯¢åæ°ã宿¥åé®åä½ä¸ºåæ°ã
```javascript
var params = new URLSearchParams({'foo': 1 , 'bar': 2});
params.delete('bar');
params.toString() // "foo=1"
```
### URLSearchParams.has()
`has`æ¹æ³è¿åä¸ä¸ªå¸å°å¼ï¼è¡¨ç¤ºæ¥è¯¢å符串æ¯å¦å
嫿å®çé®åã
```javascript
var params = new URLSearchParams({'foo': 1 , 'bar': 2});
params.has('bar') // true
params.has('baz') // false
```
### URLSearchParams.set()
`set`æ¹æ³ç¨æ¥è®¾ç½®æ¥è¯¢å符串çé®å¼ã
宿¥åä¸¤ä¸ªåæ°ï¼ç¬¬ä¸ä¸ªæ¯é®åï¼ç¬¬äºä¸ªæ¯é®å¼ã妿æ¯å·²ç»åå¨çé®ï¼é®å¼ä¼è¢«æ¹åï¼å¦åä¼è¢«è¿½å ã
```javascript
var params = new URLSearchParams('?foo=1');
params.set('foo', 2);
params.toString() // "foo=2"
params.set('bar', 3);
params.toString() // "foo=2&bar=3"
```
ä¸é¢ä»£ç ä¸ï¼`foo`æ¯å·²ç»åå¨çé®ï¼`bar`æ¯è¿ä¸åå¨çé®ã
妿æå¤ä¸ªçååé®ï¼`set`ä¼ç§»é¤ç°åææçé®ã
```javascript
var params = new URLSearchParams('?foo=1&foo=2');
params.set('foo', 3);
params.toString() // "foo=3"
```
ä¸é¢æ¯ä¸ä¸ªæ¿æ¢å½å URL çä¾åã
```javascript
// URL: https://example.com?version=1.0
var params = new URLSearchParams(location.search.slice(1));
params.set('version', 2.0);
window.history.replaceState({}, '', location.pathname + `?` + params);
// URL: https://example.com?version=2.0
```
### URLSearchParams.get()ï¼URLSearchParams.getAll()
`get`æ¹æ³ç¨æ¥è¯»åæ¥è¯¢å符串éé¢çæå®é®ã宿¥åé®åä½ä¸ºåæ°ã
```javascript
var params = new URLSearchParams('?foo=1');
params.get('foo') // "1"
params.get('bar') // null
```
ä¸¤ä¸ªå°æ¹éè¦æ³¨æã第ä¸ï¼å®è¿åçæ¯å符串ï¼å¦æåå§å¼æ¯æ°å¼ï¼éè¦è½¬ä¸ä¸ç±»åï¼ç¬¬äºï¼å¦ææå®çé®åä¸åå¨ï¼è¿å弿¯`null`ã
妿æå¤ä¸ªçååé®ï¼`get`è¿åä½ç½®æåé¢çé£ä¸ªé®å¼ã
```javascript
var params = new URLSearchParams('?foo=3&foo=2&foo=1');
params.get('foo') // "3"
```
ä¸é¢ä»£ç ä¸ï¼æ¥è¯¢å符串æä¸ä¸ª`foo`é®ï¼`get`æ¹æ³è¿åæåé¢çé®å¼`3`ã
`getAll`æ¹æ³è¿åä¸ä¸ªæ°ç»ï¼æåæ¯æå®é®çææé®å¼ã宿¥åé®åä½ä¸ºåæ°ã
```javascript
var params = new URLSearchParams('?foo=1&foo=2');
params.getAll('foo') // ["1", "2"]
```
ä¸é¢ä»£ç ä¸ï¼æ¥è¯¢å符串æä¸¤ä¸ª`foo`é®ï¼`getAll`è¿åçæ°ç»å°±æä¸¤ä¸ªæåã
### URLSearchParams.sort()
`sort`æ¹æ³å¯¹æ¥è¯¢å符串éé¢çé®è¿è¡æåºï¼è§åæ¯æç
§ Unicode ç ç¹ä»å°å°å¤§æåã
è¯¥æ¹æ³æ²¡æè¿åå¼ï¼æè
说è¿å弿¯`undefined`ã
```javascript
var params = new URLSearchParams('c=4&a=2&b=3&a=1');
params.sort();
params.toString() // "a=2&a=1&b=3&c=4"
```
ä¸é¢ä»£ç ä¸ï¼å¦ææä¸¤ä¸ªååçé®`a`ï¼å®ä»¬ä¹é´ä¸ä¼æåºï¼èæ¯ä¿çåå§ç顺åºã
### URLSearchParams.keys()ï¼URLSearchParams.values()ï¼URLSearchParams.entries()
è¿ä¸ä¸ªæ¹æ³é½è¿åä¸ä¸ªéåå¨å¯¹è±¡ï¼ä¾`for...of`å¾ªç¯æ¶è´¹ãå®ä»¬çåºå«å¨äºï¼`keys`æ¹æ³è¿åçæ¯é®åçéåå¨ï¼`values`æ¹æ³è¿åçæ¯é®å¼çéåå¨ï¼`entries`è¿åçæ¯é®å¼å¯¹çéåå¨ã
```javascript
var params = new URLSearchParams('a=1&b=2');
for(var p of params.keys()) {
console.log(p);
}
// a
// b
for(var p of params.values()) {
console.log(p);
}
// 1
// 2
for(var p of params.entries()) {
console.log(p);
}
// ["a", "1"]
// ["b", "2"]
```
å¦æç´æ¥å¯¹`URLSearchParams`è¿è¡éåï¼å
¶å®å
é¨è°ç¨çå°±æ¯`entries`æ¥å£ã
```javascript
for (var p of params) {}
// çåäº
for (var p of params.entries()) {}
```
## åè龿¥
- [Location](https://developer.mozilla.org/en-US/docs/Web/API/Location), by MDN
- [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL), by MDN
- [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams), by MDN
- [Easy URL Manipulation with URLSearchParams](https://developers.google.com/web/updates/2016/01/urlsearchparams?hl=en), by Eric Bidelman