# Arktsåç³»ç»Ÿå˜æ›´è¯´æ˜Ž ## cl.arkts.1 TreeSet.clear()å’ŒTreeMap.clear()接å£è¡Œä¸ºå˜æ›´ **访问级别** å…¬å¼€æŽ¥å£ **å˜æ›´åŽŸå› ** 容器类TreeMapå’ŒTreeSetçš„æž„é€ å‡½æ•°æ”¯æŒä¼ 入比较器,用户å¯ä»¥é€šè¿‡ä¼ å…¥æ¯”è¾ƒå™¨æ¥æŽ§åˆ¶å…ƒç´ åœ¨äºŒå‰æ ‘上的æ’å…¥ä½ç½®ã€‚当用户调用了TreeMapå’ŒTreeSetçš„clear方法时,预期结果为仅清除数æ®ï¼Œ 实际结果为清除数æ®çš„åŒæ—¶è¿˜æ¸…é™¤äº†ç”¨æˆ·ä¼ å…¥çš„æ¯”è¾ƒå™¨ï¼Œå¯¼è‡´å†æ¬¡æ’å…¥æ•°æ®æ—¶ä¸ä¼šéµå¾ªç”¨æˆ·ä¼ 入的比较器的规则,而是按照默认比较器的规则,ä¸ç¬¦åˆç”¨æˆ·é¢„期,需è¦å˜æ›´æŽ¥å£è¡Œä¸ºã€‚ **å˜æ›´å½±å“** ä¸å…¼å®¹å˜æ›´ï¼Œå½±å“调用clear()åŽçš„æŽ’åºè§„则。 **å˜æ›´å‰** - 情况一: ç”¨æˆ·ä¼ å…¥æ¯”è¾ƒå™¨ï¼Œè°ƒç”¨äº†TreeMapçš„clear方法åŽï¼Œæ¯”较器失效。 ``` //使用comparator firstValue > secondValue,表示为é™åºæŽ’åºã€‚ let treeMap : TreeMap<string,string> = new TreeMap<string,string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeMap.set("aa","3"); treeMap.set("dd","1"); treeMap.set("cc","2"); treeMap.set("bb","4"); let numbers = Array.from(treeMap.keys()) for (let item of numbers) { console.log("treeMap:" + item); // key: dd cc bb aa } treeMap.clear(); treeMap.set("aa","3"); treeMap.set("dd","1"); treeMap.set("cc","2"); treeMap.set("bb","4"); numbers = Array.from(treeMap.keys()) for (let item of numbers) { console.log("treeMap:" + item); //key: aa bb cc dd } ``` - 情况二: ç”¨æˆ·ä¼ å…¥æ¯”è¾ƒå™¨ï¼Œè°ƒç”¨äº†TreeSetçš„clear方法åŽï¼Œæ¯”较器失效。 ``` let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeSet.add("a"); treeSet.add("c"); treeSet.add("d"); treeSet.add("b"); let numbers = Array.from(treeSet.values()) for (let item of numbers) { console.log("TreeSet:" + item); // value: d c b a } treeSet.clear(); treeSet.add("a"); treeSet.add("c"); treeSet.add("d"); treeSet.add("b"); numbers = Array.from(treeSet.values()) for (let item of numbers) { console.log("TreeSet:" + item); // value: a b c d } ``` **å˜æ›´åŽ** - 情况一: ç”¨æˆ·ä¼ å…¥æ¯”è¾ƒå™¨ï¼Œè°ƒç”¨äº†TreeMapçš„clear方法åŽï¼Œæ¯”较器æ£å¸¸æŽ’åºã€‚ ``` //使用comparator firstValue > secondValue,表示为é™åºæŽ’åºã€‚ let treeMap : TreeMap<string,string> = new TreeMap<string,string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeMap.set("aa","3"); treeMap.set("dd","1"); treeMap.set("cc","2"); treeMap.set("bb","4"); let numbers = Array.from(treeMap.keys()) for (let item of numbers) { console.log("treeMap:" + item); // treeMap: dd cc bb aa } treeMap.clear(); treeMap.set("aa","3"); treeMap.set("dd","1"); treeMap.set("cc","2"); treeMap.set("bb","4"); numbers = Array.from(treeMap.keys()) for (let item of numbers) { console.log("treeMap:" + item); // treeMap: dd cc bb aa } ``` - 情况二: ç”¨æˆ·ä¼ å…¥æ¯”è¾ƒå™¨ï¼Œè°ƒç”¨äº†TreeSetçš„clear方法åŽï¼Œæ¯”较器æ£å¸¸æŽ’åºã€‚ ``` let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeSet.add("a"); treeSet.add("c"); treeSet.add("d"); treeSet.add("b"); let numbers = Array.from(treeSet.values()) for (let item of numbers) { console.log("TreeSet:" + item); // TreeSet: d c b a } treeSet.clear(); treeSet.add("a"); treeSet.add("c"); treeSet.add("d"); treeSet.add("b"); numbers = Array.from(treeSet.values()) for (let item of numbers) { console.log("TreeSet:" + item); // TreeSet: d c b a } ``` **èµ·å§‹API Level** 8 **å˜æ›´å‘生版本** 从OpenHarmony SDK 5.0.0.32 版本开始。 **å˜æ›´çš„æŽ¥å£/组件** TreeMap.clear(); TreeSet.clear(); **适酿Œ‡å¯¼** TreeSet.clear()å’ŒTreeMap.clear()æ–¹æ³•è¡Œä¸ºå˜æ›´ä¹‹åŽï¼Œç”¨æˆ·æ— éœ€é‡æ–°è®¾ç½®æ¯”较器也能æ£å¸¸æŽ’åºï¼Œä¹Ÿå¯ä»¥é‡æ–°è®¾ç½®æ¯”è¾ƒå™¨æ¥æ”¹å˜å…ƒç´ çš„æŽ’åºæ–¹å¼ã€‚ 文档å¯å‚考如下: [TreeMap.clear()](../../../application-dev/reference/apis-arkts/js-apis-treemap.md#clear) [TreeSet.clear()](../../../application-dev/reference/apis-arkts/js-apis-treeset.md#clear) ## cl.arkts.2 TreeMap.setAll()接å£è¡Œä¸ºå˜æ›´ **访问级别** å…¬å¼€æŽ¥å£ **å˜æ›´åŽŸå› ** 使用setAllæŽ¥å£æ·»åŠ ä¸€ä¸ªç©ºçš„TreeMap,预期长度+0,实际长度+1。 **å˜æ›´å½±å“** è¯¥å˜æ›´ä¸ºä¸å…¼å®¹æ€§å˜æ›´ï¼Œå½±å“调用TreeMap.setAll()åŽTreeMap的长度。 - **å˜æ›´å‰** 使用setAllæŽ¥å£æ·»åŠ treeMap1åŽtreeMap长度为1 ``` let treeMap : TreeMap<string, number> = new TreeMap(); let treeMap1 : TreeMap<string, number> = new TreeMap(); treeMap.setAll(treeMap1); // å°†treeMap1ä¸çš„æ‰€æœ‰å…ƒç´ æ·»åŠ åˆ°treeMapä¸ console.info("length:", treeMap.length) // length:1 ``` - **å˜æ›´åŽ** 使用setAllæŽ¥å£æ·»åŠ treeMap1åŽtreeMap长度为0 ``` let treeMap : TreeMap<string, number> = new TreeMap(); let treeMap1 : TreeMap<string, number> = new TreeMap(); treeMap.setAll(treeMap1); // å°†treeMap1ä¸çš„æ‰€æœ‰å…ƒç´ æ·»åŠ åˆ°treeMapä¸ console.info("length:",treeMap.length) // length:0 ``` **èµ·å§‹API Level** 8 **å˜æ›´å‘生版本** 从OpenHarmony SDK 5.0.0.32 版本开始。 **å˜æ›´çš„æŽ¥å£/组件** TreeMap.setAll(); **适酿Œ‡å¯¼** 对于TreeMap.setAll()ä¼ å…¥ç©ºTreeMap的情况,开å‘者需è¦é’ˆå¯¹å˜æ›´å‰åŽTreeMap的长度å˜åŒ–进行适é…。 文档å¯å‚考如下: [TreeMap.setAll()](../../../application-dev/reference/apis-arkts/js-apis-treemap.md#setall) ## cl.arkts.3 TreeMapã€TreeSetçš„hasKeyå’Œhas接å£è¡Œä¸ºå˜æ›´ **访问级别** å…¬å¼€æŽ¥å£ **å˜æ›´åŽŸå› ** 1. å¯¹äºŽä¼ å…¥ç”¨æˆ·è‡ªå®šä¹‰æ¯”è¾ƒå™¨çš„TreeMap, ä¸èƒ½æ£ç¡®åŒºåˆ†undefined或nullä¸Žå…¶ä»–å…ƒç´ çš„æ¯”è¾ƒå…³ç³»ï¼Œå¯¼è‡´åœ¨æ²¡æœ‰æ’å…¥null或undefined的情况下hasKey(null/undefined)错误返回true。 2. å¯¹äºŽä¼ å…¥ç”¨æˆ·è‡ªå®šä¹‰æ¯”è¾ƒå™¨çš„TreeSet, ä¸èƒ½æ£ç¡®åŒºåˆ†undefined或nullä¸Žå…¶ä»–å…ƒç´ çš„æ¯”è¾ƒå…³ç³»ï¼Œå¯¼è‡´åœ¨æ²¡æœ‰æ’å…¥null或undefined的情况下has(null/undefined)错误返回true。 **å˜æ›´å½±å“** ä¸å…¼å®¹å˜æ›´ï¼Œå½±å“TreeMap.hasKey()ã€TreeSet.has()ä¼ å…¥undefined或null时的返回值。 - **å˜æ›´å‰** - 情况一: å¯¹äºŽä¼ å…¥ç”¨æˆ·è‡ªå®šä¹‰æ¯”è¾ƒå™¨çš„TreeMap,在没有æ’å…¥null或undefined的情况下hasKey(null/undefined)错误返回true。 ``` let treeMap : TreeMap<string, number> = new TreeMap((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeMap.set("aa",3); treeMap.set("dd",1); let res = treeMap.hasKey(null); let res1 = treeMap.hasKey(undefined); console.info("res:", res) // res:true console.info("res1:",res1) // res1:true ``` - 情况二: å¯¹äºŽä¼ å…¥ç”¨æˆ·è‡ªå®šä¹‰æ¯”è¾ƒå™¨çš„TreeSet,在没有æ’å…¥null或undefined的情况下has(null/undefined)错误返回true。 ``` let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeSet.add("a"); treeSet.add("c"); let res = treeSet.has(null); let res1 = treeSet.has(undefined); console.info("res:", res) // res:true console.info("res1:",res1) // res1:true ``` - **å˜æ›´åŽ** - 情况一: å¯¹äºŽä¼ å…¥ç”¨æˆ·è‡ªå®šä¹‰æ¯”è¾ƒå™¨çš„TreeMap,在没有æ’å…¥null或undefined的情况下hasKey(null/undefined)返回fasle。 ``` let treeMap : TreeMap<string, number> = new TreeMap((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeMap.set("aa",3); treeMap.set("dd",1); let res = treeMap.hasKey(null); let res1 = treeMap.hasKey(undefined); console.info("res:", res) // res:false console.info("res1:",res1) // res1:false ``` - 情况二: å¯¹äºŽä¼ å…¥ç”¨æˆ·è‡ªå®šä¹‰æ¯”è¾ƒå™¨çš„TreeSet,在没有æ’å…¥null或undefined的情况下has(null/undefined)返回false。 ``` let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue}); treeSet.add("a"); treeSet.add("c"); let res = treeSet.has(null); let res1 = treeSet.has(undefined); console.info("res:", res) // res:false console.info("res1:",res1) // res1:false ``` **èµ·å§‹API Level** 8 **å˜æ›´å‘生版本** 从OpenHarmony SDK 5.0.0.32 版本开始。 **å˜æ›´çš„æŽ¥å£/组件** TreeMap.hasKey(); TreeSet.has(); **适酿Œ‡å¯¼** 对于TreeMap.hasKey()ã€TreeSet.has()接å£ä¼ å…¥null或undefined的情况。开å‘者需è¦é’ˆå¯¹å˜æ›´å‰åŽè¿”回值的å˜åŒ–进行适é…。 文档å¯å‚考如下: [TreeMap.hasKey()](../../../application-dev/reference/apis-arkts/js-apis-treemap.md#haskey) [TreeSet.has()](../../../application-dev/reference/apis-arkts/js-apis-treeset.md#has) ## cl.arkts.4 URLParamsç±»appendæŽ¥å£æ·»åŠ çš„å€¼ä¸åŒ…å«è¿žç»ç©ºæ ¼æ—¶è¡Œä¸ºå˜æ›´ **访问级别** å…¬å¼€æŽ¥å£ **å˜æ›´åŽŸå› ** URLParamsç±»appendæŽ¥å£æ·»åŠ çš„å—符串ä¸åŒ…å«è¿žç»å¤šä¸ªç©ºæ ¼æ—¶ï¼Œè¿žç»ç©ºæ ¼ä¼šè¢«é”™è¯¯å¤„ç†æˆåªè½¬æ¢ä¸ºä¸€ä¸ª'+',该实现ä¸ç¬¦åˆURLçš„æ ‡å‡†ã€‚ **å˜æ›´å½±å“** ä¸å…¼å®¹å˜æ›´ï¼Œå½±å“URLParams.append()接å£åœ¨å…¥å‚包å«è¿žç»ç©ºæ ¼æ—¶çš„处ç†ç»“果。 **èµ·å§‹ API Level** 9 **å˜æ›´å‘生版本** 从OpenHarmony SDK 5.0.0.32开始。 **å˜æ›´çš„æŽ¥å£/组件** URLParams对象的append接å£ã€‚ å˜æ›´å‰ï¼šURLParams对象使用append()æ–¹æ³•æ·»åŠ é”®å€¼å¯¹æ—¶ï¼Œè‹¥æ·»åŠ çš„å—符串ä¸å˜åœ¨è¿žç»å¤šä¸ªç©ºæ ¼æ—¶ï¼ŒæŽ¥å£è¡¨çŽ°ä¸ºå°†è¿žç»å¤šä¸ªç©ºæ ¼åªè½¬æ¢ä¸ºä¸€ä¸ª'+'。 ```ts { const objectParams = new url.URLParams("key=abc") console.log(objectParams.toString()) // "key=abc" objectParams.append('key1', 'd e f'); console.log(objectParams.toString()) // "key=abc&key1=d+e+f" } ``` å˜æ›´åŽï¼šURLParams对象使用append()æ–¹æ³•æ·»åŠ é”®å€¼å¯¹æ—¶ï¼Œè‹¥æ·»åŠ çš„å—符串ä¸å˜åœ¨è¿žç»å¤šä¸ªç©ºæ ¼æ—¶ï¼ŒæŽ¥å£è¡¨çŽ°ä¸ºå°†è¿žç»å¤šä¸ªç©ºæ ¼è½¬æ¢ä¸ºå¯¹åº”ç©ºæ ¼æ•°é‡çš„'+'。 ```ts { const objectParams = new url.URLParams("key=abc") console.log(objectParams.toString()) // "key=abc" objectParams.append('key1', 'd e f'); console.log(objectParams.toString()) // "key=abc&key1=d+++e+++f" } ``` **适酿Œ‡å¯¼** å¼€å‘者在涉åŠä¸Šé¢appendçš„ä½¿ç”¨åœºæ™¯æ—¶ï¼Œåœ¨å˜æ›´ç”Ÿæ•ˆå‰å¦‚果对appendæ·»åŠ çš„é”®å€¼å¯¹åšåŽç»å¤„ç†æ“ä½œï¼Œå˜æ›´åŽéœ€é’ˆå¯¹è¡¨çްä¸åŒåšé’ˆå¯¹æ€§é€‚é…。 ## cl.arkts.5 URLParams类在入å‚å—符串ä¸åŒ…å«å¤§å°å†™ä¸åŒç¼–ç 值时,toString()接å£è¡¨çŽ°ç»“æžœä¸ä¸€è‡´å˜æ›´ **访问级别** å…¬å¼€æŽ¥å£ **å˜æ›´åŽŸå› ** URLParams类在入å‚å—符串ä¸åŒ…å«å¤§å°å†™ä¸åŒç¼–ç 值时toString()接å£è¿”å›žå€¼æœ‰è¯¯ï¼Œä¸»è¦æ¶‰åŠï¼š"%2b"å’Œ"%2B"的表现ä¸ä¸€è‡´ï¼Œ"%2B"被处ç†ä¸º"%2B"æ˜¯ç¬¦åˆæ ‡å‡†çš„,但"%2b"ä¼šè¢«é”™è¯¯å¤„ç†æˆ'+'。 **å˜æ›´å½±å“** ä¸å…¼å®¹å˜æ›´ï¼Œå½±å“当URLParamsæž„é€ å‡½æ•°å…¥å‚å—符串ä¸å˜åœ¨"%2b"æ—¶URLParams.toString()的返回结果。 **èµ·å§‹ API Level** 9 **å˜æ›´å‘生版本** 从OpenHarmony SDK 5.0.0.32开始。 **å˜æ›´çš„æŽ¥å£/组件** URL模å—URLParamsç±»toString接å£ï¼Œ å˜æ›´å‰ï¼šåˆ›å»ºURLParams对象,如果入å‚å—符串ä¸å˜åœ¨"%2b"å’Œ"%2B"时,在toString()åŽè¿”回的å—符串分别表现为"+"å’Œ"%2B"。 ```ts { const objectParams = new url.URLParams("key%2b=abc%2B") console.log(objectParams.toString()) // "key+=abc%2B" } ``` å˜æ›´åŽï¼šåˆ›å»ºURLParams对象,如果入å‚å—符串ä¸å˜åœ¨"%2b"å’Œ"%2B"时,在toString()åŽè¿”回的å—符串å‡è¡¨çŽ°ä¸º"%2B"; ```ts { const objectParams = new url.URLParams("key%2b=abc%2B") console.log(objectParams.toString()) // "key%2B=abc%2B" } ``` **适酿Œ‡å¯¼** å¼€å‘者在涉åŠä¸Šè¿°ä½¿ç”¨åœºæ™¯æ—¶ï¼Œåœ¨å˜æ›´ç”Ÿæ•ˆå‰å¦‚果对toString()返回值åšåŽç»å¤„ç†æ“ä½œï¼Œå˜æ›´åŽéœ€é’ˆå¯¹è¡¨çްä¸åŒåšé’ˆå¯¹æ€§é€‚é…。 ## cl.arkts.6 URLParamsç±»append接å£è¡Œä¸ºå˜æ›´ **访问级别** å…¬å¼€æŽ¥å£ **å˜æ›´åŽŸå› ** URLParams使用append()方法时,对入å‚键值对ä¸çš„特殊å—符会错误进行encode,该行为与URLæ ‡å‡†ä¸ä¸€è‡´ï¼Œå¯¼è‡´åŽç»å¯¹é”®å€¼å¯¹è¿›è¡Œå¢žåˆ æ”¹æŸ¥ç‰æ“作出现异常。 **å˜æ›´å½±å“** ä¸å…¼å®¹å˜æ›´ï¼Œå½±å“当URLParams.append()å…¥å‚包å«ä¸æ–‡ç‰ç‰¹æ®Šå—符时该函数的处ç†ç»“果。 **èµ·å§‹ API Level** 9 **å˜æ›´å‘生版本** 从OpenHarmony SDK 5.0.0.32开始。 **å˜æ›´çš„æŽ¥å£/组件** URLParamsç±»append接å£ã€‚ å˜æ›´å‰ï¼šURLParams使用append()æ–¹æ³•æ·»åŠ é”®å€¼å¯¹, è‹¥æƒ³é€šè¿‡æ·»åŠ çš„key使用getã€hasã€deleteã€set接å£è¿›è¡Œå¢žåˆ 改查æ“作,需先对key进行é¢å¤–encode。 ```ts { const objectParams = new url.URLParams('?fod=1&bard=2') objectParams.append("key&大", "abc"); objectParams.has('key&大'); // false objectParams.has('%E5%A4%A7'); // true objectParams.get('key&大'); // undefined objectParams.get('%E5%A4%A7'); // abc } ``` å˜æ›´åŽ: URLParams使用append()æ–¹æ³•æ·»åŠ é”®å€¼å¯¹,å¯ç›´æŽ¥ä½¿ç”¨æ·»åŠ çš„key拿到对应valueè¿›è¡Œå¢žåˆ æ”¹æŸ¥æ“作。 ```ts { const objectParams = new url.URLParams('?fod=1&bard=2') objectParams.append("key&大", "abc"); objectParams.has('key&大'); // true objectParams.has('%E5%A4%A7'); // false objectParams.get('key&大'); // abc objectParams.get('%E5%A4%A7'); // undefined } ``` **适酿Œ‡å¯¼** 对于URLParams.append()å…¥å‚包å«ä¸æ–‡ç‰ç‰¹æ®Šå—符的情况。开å‘者需è¦é’ˆå¯¹å˜æ›´å‰åŽè°ƒç”¨has()ã€get()ã€delete()ã€set()ä¼ å…¥è¿™äº›å—符时处ç†ç»“æžœåŠè¿”回值的å˜åŒ–进行适é…。