[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fmap-set":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fmap-set":3007,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fmap-set":3032},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":14,"pinned":15,"draft":15,"body":16,"seo":3003,"stem":3004,"id":3005,"extension":3006},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fmap-set","数据结构与集合增强","Map \u002F Set、WeakMap \u002F WeakSet、数组高阶方法、TypedArray 与 Symbol 等扩展了内置数据结构能力。见 语言基础。","技能小册",[12,13],"javascript","collections","2024-07-10",false,{"type":17,"value":18,"toc":2959},"minimark",[19,22,55,60,73,81,132,312,318,357,361,375,549,553,561,566,605,609,898,903,928,931,936,1032,1036,1039,1045,1048,1116,1122,1125,1167,1175,1178,1533,1544,1556,1631,1639,1646,1725,1728,1743,1747,1750,1756,1763,1815,1821,1827,1863,1948,1954,1960,2100,2103,2117,2121,2134,2138,2235,2239,2352,2358,2552,2559,2667,2677,2680,2785,2788,2875,2878,2881,2884,2955],[20,21,8],"h1",{"id":8},[23,24,25,29,30,33,34,29,37,40,41,44,45,48,49,54],"p",{},[26,27,28],"code",{},"Map"," \u002F ",[26,31,32],{},"Set","、",[26,35,36],{},"WeakMap",[26,38,39],{},"WeakSet","、数组高阶方法、",[26,42,43],{},"TypedArray"," 与 ",[26,46,47],{},"Symbol"," 等扩展了内置数据结构能力。见 ",[50,51,53],"a",{"href":52},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fbasics","语言基础","。",[56,57,59],"h2",{"id":58},"一map-weakmap","一、Map \u002F WeakMap",[23,61,62,64,65,67,68,72],{},[26,63,28],{}," 和 ",[26,66,36],{}," 都是键值对集合，与传统对象的区别在于",[69,70,71],"strong",{},"键的类型不受限制","，可以是任意类型（对象、函数、基本类型等）。",[74,75,77,78,80],"h3",{"id":76},"_1-map-的特点","1. ",[26,79,28],{}," 的特点",[82,83,84,88,95,102],"ul",{},[85,86,87],"li",{},"键值有序（按插入顺序迭代）。",[85,89,90,91,94],{},"任何值（包括 ",[26,92,93],{},"NaN","）都能作为键。",[85,96,97,98,101],{},"可以通过 ",[26,99,100],{},"size"," 属性获取数量。",[85,103,104,105,33,108,33,111,33,114,33,117,33,120,33,123,33,126,33,129,54],{},"方法：",[26,106,107],{},"set(key, value)",[26,109,110],{},"get(key)",[26,112,113],{},"has(key)",[26,115,116],{},"delete(key)",[26,118,119],{},"clear()",[26,121,122],{},"keys()",[26,124,125],{},"values()",[26,127,128],{},"entries()",[26,130,131],{},"forEach()",[133,134,139],"pre",{"className":135,"code":136,"language":137,"meta":138,"style":138},"language-js shiki shiki-themes material-theme-lighter github-light github-dark","const map = new Map();\nconst objKey = { id: 1 };\nmap.set(objKey, \"value1\");\nmap.set(\"string\", 123);\nconsole.log(map.get(objKey)); \u002F\u002F 'value1'\nconsole.log(map.size); \u002F\u002F 2\n","js","",[26,140,141,173,200,234,262,291],{"__ignoreMap":138},[142,143,146,150,154,158,161,165,169],"span",{"class":144,"line":145},"line",1,[142,147,149],{"class":148},"sbsja","const",[142,151,153],{"class":152},"s_hVV"," map",[142,155,157],{"class":156},"smGrS"," =",[142,159,160],{"class":156}," new",[142,162,164],{"class":163},"sGLFI"," Map",[142,166,168],{"class":167},"su5hD","()",[142,170,172],{"class":171},"sP7_E",";\n",[142,174,176,178,181,183,186,190,193,197],{"class":144,"line":175},2,[142,177,149],{"class":148},[142,179,180],{"class":152}," objKey",[142,182,157],{"class":156},[142,184,185],{"class":171}," {",[142,187,189],{"class":188},"skxfh"," id",[142,191,192],{"class":171},":",[142,194,196],{"class":195},"srdBf"," 1",[142,198,199],{"class":171}," };\n",[142,201,203,206,209,212,215,218,222,226,229,232],{"class":144,"line":202},3,[142,204,205],{"class":167},"map",[142,207,208],{"class":171},".",[142,210,211],{"class":163},"set",[142,213,214],{"class":167},"(objKey",[142,216,217],{"class":171},",",[142,219,221],{"class":220},"sjJ54"," \"",[142,223,225],{"class":224},"s_sjI","value1",[142,227,228],{"class":220},"\"",[142,230,231],{"class":167},")",[142,233,172],{"class":171},[142,235,237,239,241,243,246,248,251,253,255,258,260],{"class":144,"line":236},4,[142,238,205],{"class":167},[142,240,208],{"class":171},[142,242,211],{"class":163},[142,244,245],{"class":167},"(",[142,247,228],{"class":220},[142,249,250],{"class":224},"string",[142,252,228],{"class":220},[142,254,217],{"class":171},[142,256,257],{"class":195}," 123",[142,259,231],{"class":167},[142,261,172],{"class":171},[142,263,265,268,270,273,276,278,281,284,287],{"class":144,"line":264},5,[142,266,267],{"class":167},"console",[142,269,208],{"class":171},[142,271,272],{"class":163},"log",[142,274,275],{"class":167},"(map",[142,277,208],{"class":171},[142,279,280],{"class":163},"get",[142,282,283],{"class":167},"(objKey))",[142,285,286],{"class":171},";",[142,288,290],{"class":289},"sutJx"," \u002F\u002F 'value1'\n",[142,292,294,296,298,300,302,304,307,309],{"class":144,"line":293},6,[142,295,267],{"class":167},[142,297,208],{"class":171},[142,299,272],{"class":163},[142,301,275],{"class":167},[142,303,208],{"class":171},[142,305,306],{"class":167},"size)",[142,308,286],{"class":171},[142,310,311],{"class":289}," \u002F\u002F 2\n",[74,313,315,316,80],{"id":314},"_2-weakmap-的特点","2. ",[26,317,36],{},[82,319,320,326,335,347],{},[85,321,322,325],{},[69,323,324],{},"键必须是对象","（不能是基本类型）。",[85,327,328,331,332,334],{},[69,329,330],{},"弱引用","：键被引用的方式为“弱”引用，不会阻止垃圾回收。当没有其他引用指向该键对象时，该键值对会自动从 ",[26,333,36],{}," 中移除。",[85,336,337,340,341,343,344,346],{},[69,338,339],{},"不可迭代","（无 ",[26,342,100],{}," 属性、",[26,345,122],{}," 等），因为键随时可能消失。",[85,348,104,349,33,351,33,353,33,355,54],{},[26,350,107],{},[26,352,110],{},[26,354,113],{},[26,356,116],{},[358,359,360],"h4",{"id":360},"典型应用",[82,362,363,369],{},[85,364,365,368],{},[69,366,367],{},"缓存","：将计算结果以对象为键缓存，当对象不再被使用时，缓存自动清理，避免内存泄漏。",[85,370,371,374],{},[69,372,373],{},"关联 DOM 节点数据","：将额外数据直接挂载到 DOM 节点上，节点被移除时数据自动回收。",[133,376,378],{"className":135,"code":377,"language":137,"meta":138,"style":138},"\u002F\u002F DOM 关联示例\nconst wm = new WeakMap();\nconst button = document.querySelector(\"button\");\nwm.set(button, { clicks: 0 });\nbutton.addEventListener(\"click\", () => {\n    const data = wm.get(button);\n    data.clicks++;\n});\n\u002F\u002F 当按钮被移除时，对应的数据对象会被垃圾回收\n",[26,379,380,385,403,433,464,493,517,533,543],{"__ignoreMap":138},[142,381,382],{"class":144,"line":145},[142,383,384],{"class":289},"\u002F\u002F DOM 关联示例\n",[142,386,387,389,392,394,396,399,401],{"class":144,"line":175},[142,388,149],{"class":148},[142,390,391],{"class":152}," wm",[142,393,157],{"class":156},[142,395,160],{"class":156},[142,397,398],{"class":163}," WeakMap",[142,400,168],{"class":167},[142,402,172],{"class":171},[142,404,405,407,410,412,415,417,420,422,424,427,429,431],{"class":144,"line":202},[142,406,149],{"class":148},[142,408,409],{"class":152}," button",[142,411,157],{"class":156},[142,413,414],{"class":167}," document",[142,416,208],{"class":171},[142,418,419],{"class":163},"querySelector",[142,421,245],{"class":167},[142,423,228],{"class":220},[142,425,426],{"class":224},"button",[142,428,228],{"class":220},[142,430,231],{"class":167},[142,432,172],{"class":171},[142,434,435,438,440,442,445,447,449,452,454,457,460,462],{"class":144,"line":236},[142,436,437],{"class":167},"wm",[142,439,208],{"class":171},[142,441,211],{"class":163},[142,443,444],{"class":167},"(button",[142,446,217],{"class":171},[142,448,185],{"class":171},[142,450,451],{"class":188}," clicks",[142,453,192],{"class":171},[142,455,456],{"class":195}," 0",[142,458,459],{"class":171}," }",[142,461,231],{"class":167},[142,463,172],{"class":171},[142,465,466,468,470,473,475,477,480,482,484,487,490],{"class":144,"line":264},[142,467,426],{"class":167},[142,469,208],{"class":171},[142,471,472],{"class":163},"addEventListener",[142,474,245],{"class":167},[142,476,228],{"class":220},[142,478,479],{"class":224},"click",[142,481,228],{"class":220},[142,483,217],{"class":171},[142,485,486],{"class":171}," ()",[142,488,489],{"class":148}," =>",[142,491,492],{"class":171}," {\n",[142,494,495,498,501,503,505,507,509,511,513,515],{"class":144,"line":293},[142,496,497],{"class":148},"    const",[142,499,500],{"class":152}," data",[142,502,157],{"class":156},[142,504,391],{"class":167},[142,506,208],{"class":171},[142,508,280],{"class":163},[142,510,245],{"class":188},[142,512,426],{"class":167},[142,514,231],{"class":188},[142,516,172],{"class":171},[142,518,520,523,525,528,531],{"class":144,"line":519},7,[142,521,522],{"class":167},"    data",[142,524,208],{"class":171},[142,526,527],{"class":167},"clicks",[142,529,530],{"class":156},"++",[142,532,172],{"class":171},[142,534,536,539,541],{"class":144,"line":535},8,[142,537,538],{"class":171},"}",[142,540,231],{"class":167},[142,542,172],{"class":171},[142,544,546],{"class":144,"line":545},9,[142,547,548],{"class":289},"\u002F\u002F 当按钮被移除时，对应的数据对象会被垃圾回收\n",[56,550,552],{"id":551},"二set-weakset","二、Set \u002F WeakSet",[23,554,555,557,558,560],{},[26,556,32],{}," 是值不重复的集合，",[26,559,39],{}," 是存储对象且弱引用的集合。",[74,562,77,564,80],{"id":563},"_1-set-的特点",[26,565,32],{},[82,567,568,578,584],{},[85,569,570,571,574,575,577],{},"值唯一（使用 ",[26,572,573],{},"SameValueZero"," 比较，",[26,576,93],{}," 视为相等）。",[85,579,580,581,583],{},"可迭代，有 ",[26,582,100],{}," 属性。",[85,585,104,586,33,589,33,592,33,595,33,597,33,599,33,601,33,603,54],{},[26,587,588],{},"add(value)",[26,590,591],{},"has(value)",[26,593,594],{},"delete(value)",[26,596,119],{},[26,598,122],{},[26,600,125],{},[26,602,128],{},[26,604,131],{},[358,606,608],{"id":607},"常用场景去重和集合运算","常用场景：去重和集合运算",[133,610,612],{"className":135,"code":611,"language":137,"meta":138,"style":138},"\u002F\u002F 去重\nconst arr = [1, 2, 2, 3];\nconst unique = [...new Set(arr)]; \u002F\u002F [1,2,3]\n\n\u002F\u002F 集合运算\nconst setA = new Set([1, 2, 3]);\nconst setB = new Set([2, 3, 4]);\n\u002F\u002F 并集\nconst union = new Set([...setA, ...setB]); \u002F\u002F {1,2,3,4}\n\u002F\u002F 交集\nconst intersect = new Set([...setA].filter(x => setB.has(x))); \u002F\u002F {2,3}\n\u002F\u002F 差集 (A - B)\nconst diff = new Set([...setA].filter(x => !setB.has(x))); \u002F\u002F {1}\n",[26,613,614,619,653,678,684,689,720,751,756,790,796,845,851],{"__ignoreMap":138},[142,615,616],{"class":144,"line":145},[142,617,618],{"class":289},"\u002F\u002F 去重\n",[142,620,621,623,626,628,631,634,636,639,641,643,645,648,651],{"class":144,"line":175},[142,622,149],{"class":148},[142,624,625],{"class":152}," arr",[142,627,157],{"class":156},[142,629,630],{"class":167}," [",[142,632,633],{"class":195},"1",[142,635,217],{"class":171},[142,637,638],{"class":195}," 2",[142,640,217],{"class":171},[142,642,638],{"class":195},[142,644,217],{"class":171},[142,646,647],{"class":195}," 3",[142,649,650],{"class":167},"]",[142,652,172],{"class":171},[142,654,655,657,660,662,664,667,670,673,675],{"class":144,"line":202},[142,656,149],{"class":148},[142,658,659],{"class":152}," unique",[142,661,157],{"class":156},[142,663,630],{"class":167},[142,665,666],{"class":156},"...new",[142,668,669],{"class":163}," Set",[142,671,672],{"class":167},"(arr)]",[142,674,286],{"class":171},[142,676,677],{"class":289}," \u002F\u002F [1,2,3]\n",[142,679,680],{"class":144,"line":236},[142,681,683],{"emptyLinePlaceholder":682},true,"\n",[142,685,686],{"class":144,"line":264},[142,687,688],{"class":289},"\u002F\u002F 集合运算\n",[142,690,691,693,696,698,700,702,705,707,709,711,713,715,718],{"class":144,"line":293},[142,692,149],{"class":148},[142,694,695],{"class":152}," setA",[142,697,157],{"class":156},[142,699,160],{"class":156},[142,701,669],{"class":163},[142,703,704],{"class":167},"([",[142,706,633],{"class":195},[142,708,217],{"class":171},[142,710,638],{"class":195},[142,712,217],{"class":171},[142,714,647],{"class":195},[142,716,717],{"class":167},"])",[142,719,172],{"class":171},[142,721,722,724,727,729,731,733,735,738,740,742,744,747,749],{"class":144,"line":519},[142,723,149],{"class":148},[142,725,726],{"class":152}," setB",[142,728,157],{"class":156},[142,730,160],{"class":156},[142,732,669],{"class":163},[142,734,704],{"class":167},[142,736,737],{"class":195},"2",[142,739,217],{"class":171},[142,741,647],{"class":195},[142,743,217],{"class":171},[142,745,746],{"class":195}," 4",[142,748,717],{"class":167},[142,750,172],{"class":171},[142,752,753],{"class":144,"line":535},[142,754,755],{"class":289},"\u002F\u002F 并集\n",[142,757,758,760,763,765,767,769,771,774,777,779,782,785,787],{"class":144,"line":545},[142,759,149],{"class":148},[142,761,762],{"class":152}," union",[142,764,157],{"class":156},[142,766,160],{"class":156},[142,768,669],{"class":163},[142,770,704],{"class":167},[142,772,773],{"class":156},"...",[142,775,776],{"class":167},"setA",[142,778,217],{"class":171},[142,780,781],{"class":156}," ...",[142,783,784],{"class":167},"setB])",[142,786,286],{"class":171},[142,788,789],{"class":289}," \u002F\u002F {1,2,3,4}\n",[142,791,793],{"class":144,"line":792},10,[142,794,795],{"class":289},"\u002F\u002F 交集\n",[142,797,799,801,804,806,808,810,812,814,817,819,822,824,828,830,832,834,837,840,842],{"class":144,"line":798},11,[142,800,149],{"class":148},[142,802,803],{"class":152}," intersect",[142,805,157],{"class":156},[142,807,160],{"class":156},[142,809,669],{"class":163},[142,811,704],{"class":167},[142,813,773],{"class":156},[142,815,816],{"class":167},"setA]",[142,818,208],{"class":171},[142,820,821],{"class":163},"filter",[142,823,245],{"class":167},[142,825,827],{"class":826},"s99_P","x",[142,829,489],{"class":148},[142,831,726],{"class":167},[142,833,208],{"class":171},[142,835,836],{"class":163},"has",[142,838,839],{"class":167},"(x)))",[142,841,286],{"class":171},[142,843,844],{"class":289}," \u002F\u002F {2,3}\n",[142,846,848],{"class":144,"line":847},12,[142,849,850],{"class":289},"\u002F\u002F 差集 (A - B)\n",[142,852,854,856,859,861,863,865,867,869,871,873,875,877,879,881,884,887,889,891,893,895],{"class":144,"line":853},13,[142,855,149],{"class":148},[142,857,858],{"class":152}," diff",[142,860,157],{"class":156},[142,862,160],{"class":156},[142,864,669],{"class":163},[142,866,704],{"class":167},[142,868,773],{"class":156},[142,870,816],{"class":167},[142,872,208],{"class":171},[142,874,821],{"class":163},[142,876,245],{"class":167},[142,878,827],{"class":826},[142,880,489],{"class":148},[142,882,883],{"class":156}," !",[142,885,886],{"class":167},"setB",[142,888,208],{"class":171},[142,890,836],{"class":163},[142,892,839],{"class":167},[142,894,286],{"class":171},[142,896,897],{"class":289}," \u002F\u002F {1}\n",[74,899,315,901,80],{"id":900},"_2-weakset-的特点",[26,902,39],{},[82,904,905,912,917],{},[85,906,907,908,911],{},"只能存放",[69,909,910],{},"对象","，不能是基本类型。",[85,913,914,915,54],{},"弱引用，不可迭代，无 ",[26,916,100],{},[85,918,104,919,33,922,33,925,54],{},[26,920,921],{},"add(obj)",[26,923,924],{},"has(obj)",[26,926,927],{},"delete(obj)",[358,929,360],{"id":930},"典型应用-1",[82,932,933],{},[85,934,935],{},"标记对象“是否被处理”而不干扰垃圾回收。",[133,937,939],{"className":135,"code":938,"language":137,"meta":138,"style":138},"const processed = new WeakSet();\nfunction process(obj) {\n    if (processed.has(obj)) return;\n    \u002F\u002F 处理逻辑\n    processed.add(obj);\n}\n",[26,940,941,959,976,1004,1009,1027],{"__ignoreMap":138},[142,942,943,945,948,950,952,955,957],{"class":144,"line":145},[142,944,149],{"class":148},[142,946,947],{"class":152}," processed",[142,949,157],{"class":156},[142,951,160],{"class":156},[142,953,954],{"class":163}," WeakSet",[142,956,168],{"class":167},[142,958,172],{"class":171},[142,960,961,964,967,969,972,974],{"class":144,"line":175},[142,962,963],{"class":148},"function",[142,965,966],{"class":163}," process",[142,968,245],{"class":171},[142,970,971],{"class":826},"obj",[142,973,231],{"class":171},[142,975,492],{"class":171},[142,977,978,982,985,988,990,992,994,996,999,1002],{"class":144,"line":202},[142,979,981],{"class":980},"sVHd0","    if",[142,983,984],{"class":188}," (",[142,986,987],{"class":167},"processed",[142,989,208],{"class":171},[142,991,836],{"class":163},[142,993,245],{"class":188},[142,995,971],{"class":167},[142,997,998],{"class":188},")) ",[142,1000,1001],{"class":980},"return",[142,1003,172],{"class":171},[142,1005,1006],{"class":144,"line":236},[142,1007,1008],{"class":289},"    \u002F\u002F 处理逻辑\n",[142,1010,1011,1014,1016,1019,1021,1023,1025],{"class":144,"line":264},[142,1012,1013],{"class":167},"    processed",[142,1015,208],{"class":171},[142,1017,1018],{"class":163},"add",[142,1020,245],{"class":188},[142,1022,971],{"class":167},[142,1024,231],{"class":188},[142,1026,172],{"class":171},[142,1028,1029],{"class":144,"line":293},[142,1030,1031],{"class":171},"}\n",[56,1033,1035],{"id":1034},"三数组高阶方法常用且深层次的运用","三、数组高阶方法（常用且深层次的运用）",[23,1037,1038],{},"这些方法是函数式编程的基础，掌握高阶用法能极大简化代码。",[74,1040,77,1042,1044],{"id":1041},"_1-map-映射",[26,1043,205],{}," – 映射",[23,1046,1047],{},"创建新数组，每个元素由原数组元素经过函数转换而来。",[133,1049,1051],{"className":135,"code":1050,"language":137,"meta":138,"style":138},"const numbers = [1, 2, 3];\nconst doubled = numbers.map(x => x * 2);\n\u002F\u002F 注意：可以传入第二个参数绑定 this\n",[26,1052,1053,1078,1111],{"__ignoreMap":138},[142,1054,1055,1057,1060,1062,1064,1066,1068,1070,1072,1074,1076],{"class":144,"line":145},[142,1056,149],{"class":148},[142,1058,1059],{"class":152}," numbers",[142,1061,157],{"class":156},[142,1063,630],{"class":167},[142,1065,633],{"class":195},[142,1067,217],{"class":171},[142,1069,638],{"class":195},[142,1071,217],{"class":171},[142,1073,647],{"class":195},[142,1075,650],{"class":167},[142,1077,172],{"class":171},[142,1079,1080,1082,1085,1087,1089,1091,1093,1095,1097,1099,1102,1105,1107,1109],{"class":144,"line":175},[142,1081,149],{"class":148},[142,1083,1084],{"class":152}," doubled",[142,1086,157],{"class":156},[142,1088,1059],{"class":167},[142,1090,208],{"class":171},[142,1092,205],{"class":163},[142,1094,245],{"class":167},[142,1096,827],{"class":826},[142,1098,489],{"class":148},[142,1100,1101],{"class":167}," x ",[142,1103,1104],{"class":156},"*",[142,1106,638],{"class":195},[142,1108,231],{"class":167},[142,1110,172],{"class":171},[142,1112,1113],{"class":144,"line":202},[142,1114,1115],{"class":289},"\u002F\u002F 注意：可以传入第二个参数绑定 this\n",[74,1117,315,1119,1121],{"id":1118},"_2-filter-过滤",[26,1120,821],{}," – 过滤",[23,1123,1124],{},"保留满足条件的元素。",[133,1126,1128],{"className":135,"code":1127,"language":137,"meta":138,"style":138},"const evens = numbers.filter(x => x % 2 === 0);\n",[26,1129,1130],{"__ignoreMap":138},[142,1131,1132,1134,1137,1139,1141,1143,1145,1147,1149,1151,1153,1156,1158,1161,1163,1165],{"class":144,"line":145},[142,1133,149],{"class":148},[142,1135,1136],{"class":152}," evens",[142,1138,157],{"class":156},[142,1140,1059],{"class":167},[142,1142,208],{"class":171},[142,1144,821],{"class":163},[142,1146,245],{"class":167},[142,1148,827],{"class":826},[142,1150,489],{"class":148},[142,1152,1101],{"class":167},[142,1154,1155],{"class":156},"%",[142,1157,638],{"class":195},[142,1159,1160],{"class":156}," ===",[142,1162,456],{"class":195},[142,1164,231],{"class":167},[142,1166,172],{"class":171},[74,1168,1170,1171,1174],{"id":1169},"_3-reduce-累计最强大","3. ",[26,1172,1173],{},"reduce"," – 累计（最强大）",[23,1176,1177],{},"可累积为任何值（数字、数组、对象等）。",[133,1179,1181],{"className":135,"code":1180,"language":137,"meta":138,"style":138},"const sum = numbers.reduce((acc, cur) => acc + cur, 0);\n\u002F\u002F 深入：实现 map\u002Fflatten\u002F管道等\nconst flat = [\n    [1, 2],\n    [3, 4],\n].reduce((acc, cur) => acc.concat(cur), []); \u002F\u002F [1,2,3,4]\n\u002F\u002F 按属性分组\nconst people = [\n    { name: \"A\", age: 20 },\n    { name: \"B\", age: 20 },\n    { name: \"C\", age: 21 },\n];\nconst grouped = people.reduce((acc, p) => {\n    (acc[p.age] = acc[p.age] || []).push(p);\n    return acc;\n}, {});\n",[26,1182,1183,1230,1235,1247,1263,1278,1321,1326,1337,1367,1392,1418,1424,1456,1510,1520],{"__ignoreMap":138},[142,1184,1185,1187,1190,1192,1194,1196,1198,1200,1202,1205,1207,1210,1212,1214,1217,1220,1222,1224,1226,1228],{"class":144,"line":145},[142,1186,149],{"class":148},[142,1188,1189],{"class":152}," sum",[142,1191,157],{"class":156},[142,1193,1059],{"class":167},[142,1195,208],{"class":171},[142,1197,1173],{"class":163},[142,1199,245],{"class":167},[142,1201,245],{"class":171},[142,1203,1204],{"class":826},"acc",[142,1206,217],{"class":171},[142,1208,1209],{"class":826}," cur",[142,1211,231],{"class":171},[142,1213,489],{"class":148},[142,1215,1216],{"class":167}," acc ",[142,1218,1219],{"class":156},"+",[142,1221,1209],{"class":167},[142,1223,217],{"class":171},[142,1225,456],{"class":195},[142,1227,231],{"class":167},[142,1229,172],{"class":171},[142,1231,1232],{"class":144,"line":175},[142,1233,1234],{"class":289},"\u002F\u002F 深入：实现 map\u002Fflatten\u002F管道等\n",[142,1236,1237,1239,1242,1244],{"class":144,"line":202},[142,1238,149],{"class":148},[142,1240,1241],{"class":152}," flat",[142,1243,157],{"class":156},[142,1245,1246],{"class":167}," [\n",[142,1248,1249,1252,1254,1256,1258,1260],{"class":144,"line":236},[142,1250,1251],{"class":167},"    [",[142,1253,633],{"class":195},[142,1255,217],{"class":171},[142,1257,638],{"class":195},[142,1259,650],{"class":167},[142,1261,1262],{"class":171},",\n",[142,1264,1265,1267,1270,1272,1274,1276],{"class":144,"line":264},[142,1266,1251],{"class":167},[142,1268,1269],{"class":195},"3",[142,1271,217],{"class":171},[142,1273,746],{"class":195},[142,1275,650],{"class":167},[142,1277,1262],{"class":171},[142,1279,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1303,1305,1308,1311,1313,1316,1318],{"class":144,"line":293},[142,1281,650],{"class":167},[142,1283,208],{"class":171},[142,1285,1173],{"class":163},[142,1287,245],{"class":167},[142,1289,245],{"class":171},[142,1291,1204],{"class":826},[142,1293,217],{"class":171},[142,1295,1209],{"class":826},[142,1297,231],{"class":171},[142,1299,489],{"class":148},[142,1301,1302],{"class":167}," acc",[142,1304,208],{"class":171},[142,1306,1307],{"class":163},"concat",[142,1309,1310],{"class":167},"(cur)",[142,1312,217],{"class":171},[142,1314,1315],{"class":167}," [])",[142,1317,286],{"class":171},[142,1319,1320],{"class":289}," \u002F\u002F [1,2,3,4]\n",[142,1322,1323],{"class":144,"line":519},[142,1324,1325],{"class":289},"\u002F\u002F 按属性分组\n",[142,1327,1328,1330,1333,1335],{"class":144,"line":535},[142,1329,149],{"class":148},[142,1331,1332],{"class":152}," people",[142,1334,157],{"class":156},[142,1336,1246],{"class":167},[142,1338,1339,1342,1345,1347,1349,1352,1354,1356,1359,1361,1364],{"class":144,"line":545},[142,1340,1341],{"class":171},"    {",[142,1343,1344],{"class":188}," name",[142,1346,192],{"class":171},[142,1348,221],{"class":220},[142,1350,1351],{"class":224},"A",[142,1353,228],{"class":220},[142,1355,217],{"class":171},[142,1357,1358],{"class":188}," age",[142,1360,192],{"class":171},[142,1362,1363],{"class":195}," 20",[142,1365,1366],{"class":171}," },\n",[142,1368,1369,1371,1373,1375,1377,1380,1382,1384,1386,1388,1390],{"class":144,"line":792},[142,1370,1341],{"class":171},[142,1372,1344],{"class":188},[142,1374,192],{"class":171},[142,1376,221],{"class":220},[142,1378,1379],{"class":224},"B",[142,1381,228],{"class":220},[142,1383,217],{"class":171},[142,1385,1358],{"class":188},[142,1387,192],{"class":171},[142,1389,1363],{"class":195},[142,1391,1366],{"class":171},[142,1393,1394,1396,1398,1400,1402,1405,1407,1409,1411,1413,1416],{"class":144,"line":798},[142,1395,1341],{"class":171},[142,1397,1344],{"class":188},[142,1399,192],{"class":171},[142,1401,221],{"class":220},[142,1403,1404],{"class":224},"C",[142,1406,228],{"class":220},[142,1408,217],{"class":171},[142,1410,1358],{"class":188},[142,1412,192],{"class":171},[142,1414,1415],{"class":195}," 21",[142,1417,1366],{"class":171},[142,1419,1420,1422],{"class":144,"line":847},[142,1421,650],{"class":167},[142,1423,172],{"class":171},[142,1425,1426,1428,1431,1433,1435,1437,1439,1441,1443,1445,1447,1450,1452,1454],{"class":144,"line":853},[142,1427,149],{"class":148},[142,1429,1430],{"class":152}," grouped",[142,1432,157],{"class":156},[142,1434,1332],{"class":167},[142,1436,208],{"class":171},[142,1438,1173],{"class":163},[142,1440,245],{"class":167},[142,1442,245],{"class":171},[142,1444,1204],{"class":826},[142,1446,217],{"class":171},[142,1448,1449],{"class":826}," p",[142,1451,231],{"class":171},[142,1453,489],{"class":148},[142,1455,492],{"class":171},[142,1457,1459,1462,1464,1467,1469,1471,1474,1477,1480,1482,1484,1486,1488,1490,1492,1495,1497,1499,1502,1504,1506,1508],{"class":144,"line":1458},14,[142,1460,1461],{"class":188},"    (",[142,1463,1204],{"class":167},[142,1465,1466],{"class":188},"[",[142,1468,23],{"class":167},[142,1470,208],{"class":171},[142,1472,1473],{"class":167},"age",[142,1475,1476],{"class":188},"] ",[142,1478,1479],{"class":156},"=",[142,1481,1302],{"class":167},[142,1483,1466],{"class":188},[142,1485,23],{"class":167},[142,1487,208],{"class":171},[142,1489,1473],{"class":167},[142,1491,1476],{"class":188},[142,1493,1494],{"class":156},"||",[142,1496,1315],{"class":188},[142,1498,208],{"class":171},[142,1500,1501],{"class":163},"push",[142,1503,245],{"class":188},[142,1505,23],{"class":167},[142,1507,231],{"class":188},[142,1509,172],{"class":171},[142,1511,1513,1516,1518],{"class":144,"line":1512},15,[142,1514,1515],{"class":980},"    return",[142,1517,1302],{"class":167},[142,1519,172],{"class":171},[142,1521,1523,1526,1529,1531],{"class":144,"line":1522},16,[142,1524,1525],{"class":171},"},",[142,1527,1528],{"class":171}," {}",[142,1530,231],{"class":167},[142,1532,172],{"class":171},[74,1534,1536,1537,29,1540,1543],{"id":1535},"_4-some-every-测试元素","4. ",[26,1538,1539],{},"some",[26,1541,1542],{},"every"," – 测试元素",[82,1545,1546,1551],{},[85,1547,1548,1550],{},[26,1549,1539],{},"：至少一个满足条件。",[85,1552,1553,1555],{},[26,1554,1542],{},"：所有满足条件。",[133,1557,1559],{"className":135,"code":1558,"language":137,"meta":138,"style":138},"const hasEven = numbers.some(x => x % 2 === 0); \u002F\u002F true\nconst allPositive = numbers.every(x => x > 0);\n",[26,1560,1561,1599],{"__ignoreMap":138},[142,1562,1563,1565,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596],{"class":144,"line":145},[142,1564,149],{"class":148},[142,1566,1567],{"class":152}," hasEven",[142,1569,157],{"class":156},[142,1571,1059],{"class":167},[142,1573,208],{"class":171},[142,1575,1539],{"class":163},[142,1577,245],{"class":167},[142,1579,827],{"class":826},[142,1581,489],{"class":148},[142,1583,1101],{"class":167},[142,1585,1155],{"class":156},[142,1587,638],{"class":195},[142,1589,1160],{"class":156},[142,1591,456],{"class":195},[142,1593,231],{"class":167},[142,1595,286],{"class":171},[142,1597,1598],{"class":289}," \u002F\u002F true\n",[142,1600,1601,1603,1606,1608,1610,1612,1614,1616,1618,1620,1622,1625,1627,1629],{"class":144,"line":175},[142,1602,149],{"class":148},[142,1604,1605],{"class":152}," allPositive",[142,1607,157],{"class":156},[142,1609,1059],{"class":167},[142,1611,208],{"class":171},[142,1613,1542],{"class":163},[142,1615,245],{"class":167},[142,1617,827],{"class":826},[142,1619,489],{"class":148},[142,1621,1101],{"class":167},[142,1623,1624],{"class":156},">",[142,1626,456],{"class":195},[142,1628,231],{"class":167},[142,1630,172],{"class":171},[74,1632,1634,1635,1638],{"id":1633},"_5-flatmap-映射后展平一层","5. ",[26,1636,1637],{},"flatMap"," – 映射后展平一层",[23,1640,1641,1642,1645],{},"等同于 ",[26,1643,1644],{},"map().flat(1)","，但更高效。",[133,1647,1649],{"className":135,"code":1648,"language":137,"meta":138,"style":138},"const arr = [\"hello world\", \"foo bar\"];\nconst words = arr.flatMap(str => str.split(\" \")); \u002F\u002F ['hello','world','foo','bar']\n",[26,1650,1651,1681],{"__ignoreMap":138},[142,1652,1653,1655,1657,1659,1661,1663,1666,1668,1670,1672,1675,1677,1679],{"class":144,"line":145},[142,1654,149],{"class":148},[142,1656,625],{"class":152},[142,1658,157],{"class":156},[142,1660,630],{"class":167},[142,1662,228],{"class":220},[142,1664,1665],{"class":224},"hello world",[142,1667,228],{"class":220},[142,1669,217],{"class":171},[142,1671,221],{"class":220},[142,1673,1674],{"class":224},"foo bar",[142,1676,228],{"class":220},[142,1678,650],{"class":167},[142,1680,172],{"class":171},[142,1682,1683,1685,1688,1690,1692,1694,1696,1698,1701,1703,1706,1708,1711,1713,1715,1717,1720,1722],{"class":144,"line":175},[142,1684,149],{"class":148},[142,1686,1687],{"class":152}," words",[142,1689,157],{"class":156},[142,1691,625],{"class":167},[142,1693,208],{"class":171},[142,1695,1637],{"class":163},[142,1697,245],{"class":167},[142,1699,1700],{"class":826},"str",[142,1702,489],{"class":148},[142,1704,1705],{"class":167}," str",[142,1707,208],{"class":171},[142,1709,1710],{"class":163},"split",[142,1712,245],{"class":167},[142,1714,228],{"class":220},[142,1716,221],{"class":220},[142,1718,1719],{"class":167},"))",[142,1721,286],{"class":171},[142,1723,1724],{"class":289}," \u002F\u002F ['hello','world','foo','bar']\n",[74,1726,1727],{"id":1727},"深层常考应用",[82,1729,1730,1733,1740],{},[85,1731,1732],{},"链式调用实现数据处理管道。",[85,1734,1735,1736,1739],{},"配合 ",[26,1737,1738],{},"Object.fromEntries"," 进行对象转换。",[85,1741,1742],{},"实现惰性求值（借助生成器与高阶函数）。",[56,1744,1746],{"id":1745},"四typedarrayarraybufferdataview二进制数据处理","四、TypedArray、ArrayBuffer、DataView（二进制数据处理）",[23,1748,1749],{},"在 WebGL、Canvas、WebSocket、文件处理等场景需要操作原始二进制数据。",[74,1751,77,1753],{"id":1752},"_1-arraybuffer",[26,1754,1755],{},"ArrayBuffer",[23,1757,1758,1759,1762],{},"代表一段固定长度的原始二进制数据缓冲区（如同 C 语言的 ",[26,1760,1761],{},"malloc","），不能直接读写，需要通过视图操作。",[133,1764,1766],{"className":135,"code":1765,"language":137,"meta":138,"style":138},"const buffer = new ArrayBuffer(16); \u002F\u002F 分配 16 字节\nconsole.log(buffer.byteLength); \u002F\u002F 16\n",[26,1767,1768,1794],{"__ignoreMap":138},[142,1769,1770,1772,1775,1777,1779,1782,1784,1787,1789,1791],{"class":144,"line":145},[142,1771,149],{"class":148},[142,1773,1774],{"class":152}," buffer",[142,1776,157],{"class":156},[142,1778,160],{"class":156},[142,1780,1781],{"class":163}," ArrayBuffer",[142,1783,245],{"class":167},[142,1785,1786],{"class":195},"16",[142,1788,231],{"class":167},[142,1790,286],{"class":171},[142,1792,1793],{"class":289}," \u002F\u002F 分配 16 字节\n",[142,1795,1796,1798,1800,1802,1805,1807,1810,1812],{"class":144,"line":175},[142,1797,267],{"class":167},[142,1799,208],{"class":171},[142,1801,272],{"class":163},[142,1803,1804],{"class":167},"(buffer",[142,1806,208],{"class":171},[142,1808,1809],{"class":167},"byteLength)",[142,1811,286],{"class":171},[142,1813,1814],{"class":289}," \u002F\u002F 16\n",[74,1816,315,1818,1820],{"id":1817},"_2-typedarray类型数组",[26,1819,43],{},"（类型数组）",[23,1822,1823,1824,1826],{},"提供类似数组的接口来读写 ",[26,1825,1755],{}," 中的数据，但元素固定为某种数值类型（如 Int8、Uint16、Float64 等）。常见类型：",[82,1828,1829,1841,1849],{},[85,1830,1831,33,1834,33,1837,1840],{},[26,1832,1833],{},"Int8Array",[26,1835,1836],{},"Uint8Array",[26,1838,1839],{},"Uint8ClampedArray","（用于 Canvas）",[85,1842,1843,33,1846],{},[26,1844,1845],{},"Int16Array",[26,1847,1848],{},"Uint16Array",[85,1850,1851,33,1854,33,1857,33,1860],{},[26,1852,1853],{},"Int32Array",[26,1855,1856],{},"Uint32Array",[26,1858,1859],{},"Float32Array",[26,1861,1862],{},"Float64Array",[133,1864,1866],{"className":135,"code":1865,"language":137,"meta":138,"style":138},"const uint8 = new Uint8Array(buffer); \u002F\u002F 视图：每个元素为 8 位无符号整数\nuint8[0] = 42;\nconst int16 = new Int16Array(buffer); \u002F\u002F 同一 buffer 的不同视图，数据会重叠\nconsole.log(int16[0]); \u002F\u002F 可能不是预期值，因为字节对齐方式不同\n",[26,1867,1868,1890,1907,1928],{"__ignoreMap":138},[142,1869,1870,1872,1875,1877,1879,1882,1885,1887],{"class":144,"line":145},[142,1871,149],{"class":148},[142,1873,1874],{"class":152}," uint8",[142,1876,157],{"class":156},[142,1878,160],{"class":156},[142,1880,1881],{"class":163}," Uint8Array",[142,1883,1884],{"class":167},"(buffer)",[142,1886,286],{"class":171},[142,1888,1889],{"class":289}," \u002F\u002F 视图：每个元素为 8 位无符号整数\n",[142,1891,1892,1895,1898,1900,1902,1905],{"class":144,"line":175},[142,1893,1894],{"class":167},"uint8[",[142,1896,1897],{"class":195},"0",[142,1899,1476],{"class":167},[142,1901,1479],{"class":156},[142,1903,1904],{"class":195}," 42",[142,1906,172],{"class":171},[142,1908,1909,1911,1914,1916,1918,1921,1923,1925],{"class":144,"line":202},[142,1910,149],{"class":148},[142,1912,1913],{"class":152}," int16",[142,1915,157],{"class":156},[142,1917,160],{"class":156},[142,1919,1920],{"class":163}," Int16Array",[142,1922,1884],{"class":167},[142,1924,286],{"class":171},[142,1926,1927],{"class":289}," \u002F\u002F 同一 buffer 的不同视图，数据会重叠\n",[142,1929,1930,1932,1934,1936,1939,1941,1943,1945],{"class":144,"line":236},[142,1931,267],{"class":167},[142,1933,208],{"class":171},[142,1935,272],{"class":163},[142,1937,1938],{"class":167},"(int16[",[142,1940,1897],{"class":195},[142,1942,717],{"class":167},[142,1944,286],{"class":171},[142,1946,1947],{"class":289}," \u002F\u002F 可能不是预期值，因为字节对齐方式不同\n",[74,1949,1170,1951],{"id":1950},"_3-dataview",[26,1952,1953],{},"DataView",[23,1955,1956,1957,1959],{},"更灵活地读写 ",[26,1958,1755],{},"，可以指定字节序（大小端），适合处理混合格式的二进制协议。",[133,1961,1963],{"className":135,"code":1962,"language":137,"meta":138,"style":138},"const buffer = new ArrayBuffer(8);\nconst view = new DataView(buffer);\nview.setInt16(0, 0x1234, true); \u002F\u002F true 表示小端序\nconsole.log(view.getInt16(0, true).toString(16)); \u002F\u002F 1234\nview.setFloat64(0, 3.14159);\n",[26,1964,1965,1986,2004,2036,2078],{"__ignoreMap":138},[142,1966,1967,1969,1971,1973,1975,1977,1979,1982,1984],{"class":144,"line":145},[142,1968,149],{"class":148},[142,1970,1774],{"class":152},[142,1972,157],{"class":156},[142,1974,160],{"class":156},[142,1976,1781],{"class":163},[142,1978,245],{"class":167},[142,1980,1981],{"class":195},"8",[142,1983,231],{"class":167},[142,1985,172],{"class":171},[142,1987,1988,1990,1993,1995,1997,2000,2002],{"class":144,"line":175},[142,1989,149],{"class":148},[142,1991,1992],{"class":152}," view",[142,1994,157],{"class":156},[142,1996,160],{"class":156},[142,1998,1999],{"class":163}," DataView",[142,2001,1884],{"class":167},[142,2003,172],{"class":171},[142,2005,2006,2009,2011,2014,2016,2018,2020,2023,2025,2029,2031,2033],{"class":144,"line":202},[142,2007,2008],{"class":167},"view",[142,2010,208],{"class":171},[142,2012,2013],{"class":163},"setInt16",[142,2015,245],{"class":167},[142,2017,1897],{"class":195},[142,2019,217],{"class":171},[142,2021,2022],{"class":195}," 0x1234",[142,2024,217],{"class":171},[142,2026,2028],{"class":2027},"syTEX"," true",[142,2030,231],{"class":167},[142,2032,286],{"class":171},[142,2034,2035],{"class":289}," \u002F\u002F true 表示小端序\n",[142,2037,2038,2040,2042,2044,2047,2049,2052,2054,2056,2058,2060,2062,2064,2067,2069,2071,2073,2075],{"class":144,"line":236},[142,2039,267],{"class":167},[142,2041,208],{"class":171},[142,2043,272],{"class":163},[142,2045,2046],{"class":167},"(view",[142,2048,208],{"class":171},[142,2050,2051],{"class":163},"getInt16",[142,2053,245],{"class":167},[142,2055,1897],{"class":195},[142,2057,217],{"class":171},[142,2059,2028],{"class":2027},[142,2061,231],{"class":167},[142,2063,208],{"class":171},[142,2065,2066],{"class":163},"toString",[142,2068,245],{"class":167},[142,2070,1786],{"class":195},[142,2072,1719],{"class":167},[142,2074,286],{"class":171},[142,2076,2077],{"class":289}," \u002F\u002F 1234\n",[142,2079,2080,2082,2084,2087,2089,2091,2093,2096,2098],{"class":144,"line":264},[142,2081,2008],{"class":167},[142,2083,208],{"class":171},[142,2085,2086],{"class":163},"setFloat64",[142,2088,245],{"class":167},[142,2090,1897],{"class":195},[142,2092,217],{"class":171},[142,2094,2095],{"class":195}," 3.14159",[142,2097,231],{"class":167},[142,2099,172],{"class":171},[74,2101,360],{"id":2102},"典型应用-2",[82,2104,2105,2108,2111,2114],{},[85,2106,2107],{},"处理 WebSocket 二进制帧。",[85,2109,2110],{},"解析文件（如 JPEG、ZIP 头）。",[85,2112,2113],{},"WebGL 顶点数据。",[85,2115,2116],{},"高效数值计算（与 WebAssembly 交互）。",[56,2118,2120],{"id":2119},"五symbol-用途","五、Symbol 用途",[23,2122,2123,2125,2126,2129,2130,2133],{},[26,2124,47],{}," 是 ES6 引入的第七种原始类型，每个 ",[26,2127,2128],{},"Symbol()"," 返回的值都是",[69,2131,2132],{},"唯一且不可变","的，主要用作对象属性的键。",[74,2135,2137],{"id":2136},"_1-唯一属性键避免命名冲突","1. 唯一属性键（避免命名冲突）",[133,2139,2141],{"className":135,"code":2140,"language":137,"meta":138,"style":138},"const id = Symbol(\"id\");\nconst user = {\n    name: \"Alice\",\n    [id]: 12345,\n};\nconsole.log(user[id]); \u002F\u002F 12345\n\u002F\u002F Symbol 属性不会出现在 for...in 或 Object.keys() 中，但可通过 Object.getOwnPropertySymbols() 获取\n",[26,2142,2143,2167,2178,2194,2209,2214,2230],{"__ignoreMap":138},[142,2144,2145,2147,2149,2151,2154,2156,2158,2161,2163,2165],{"class":144,"line":145},[142,2146,149],{"class":148},[142,2148,189],{"class":152},[142,2150,157],{"class":156},[142,2152,2153],{"class":163}," Symbol",[142,2155,245],{"class":167},[142,2157,228],{"class":220},[142,2159,2160],{"class":224},"id",[142,2162,228],{"class":220},[142,2164,231],{"class":167},[142,2166,172],{"class":171},[142,2168,2169,2171,2174,2176],{"class":144,"line":175},[142,2170,149],{"class":148},[142,2172,2173],{"class":152}," user",[142,2175,157],{"class":156},[142,2177,492],{"class":171},[142,2179,2180,2183,2185,2187,2190,2192],{"class":144,"line":202},[142,2181,2182],{"class":188},"    name",[142,2184,192],{"class":171},[142,2186,221],{"class":220},[142,2188,2189],{"class":224},"Alice",[142,2191,228],{"class":220},[142,2193,1262],{"class":171},[142,2195,2196,2198,2200,2202,2204,2207],{"class":144,"line":236},[142,2197,1251],{"class":188},[142,2199,2160],{"class":167},[142,2201,650],{"class":188},[142,2203,192],{"class":171},[142,2205,2206],{"class":195}," 12345",[142,2208,1262],{"class":171},[142,2210,2211],{"class":144,"line":264},[142,2212,2213],{"class":171},"};\n",[142,2215,2216,2218,2220,2222,2225,2227],{"class":144,"line":293},[142,2217,267],{"class":167},[142,2219,208],{"class":171},[142,2221,272],{"class":163},[142,2223,2224],{"class":167},"(user[id])",[142,2226,286],{"class":171},[142,2228,2229],{"class":289}," \u002F\u002F 12345\n",[142,2231,2232],{"class":144,"line":519},[142,2233,2234],{"class":289},"\u002F\u002F Symbol 属性不会出现在 for...in 或 Object.keys() 中，但可通过 Object.getOwnPropertySymbols() 获取\n",[74,2236,2238],{"id":2237},"_2-内置-symbol用于定制语言行为","2. 内置 Symbol（用于定制语言行为）",[2240,2241,2242,2255],"table",{},[2243,2244,2245],"thead",{},[2246,2247,2248,2252],"tr",{},[2249,2250,2251],"th",{},"内置符号",[2249,2253,2254],{},"作用",[2256,2257,2258,2273,2286,2300,2314,2328,2338],"tbody",{},[2246,2259,2260,2266],{},[2261,2262,2263],"td",{},[26,2264,2265],{},"Symbol.iterator",[2261,2267,2268,2269,2272],{},"定义默认迭代器（使对象可 ",[26,2270,2271],{},"for...of","）",[2246,2274,2275,2280],{},[2261,2276,2277],{},[26,2278,2279],{},"Symbol.asyncIterator",[2261,2281,2282,2283,2272],{},"定义异步迭代器（用于 ",[26,2284,2285],{},"for await...of",[2246,2287,2288,2293],{},[2261,2289,2290],{},[26,2291,2292],{},"Symbol.toStringTag",[2261,2294,2295,2296,2299],{},"修改 ",[26,2297,2298],{},"Object.prototype.toString.call(obj)"," 返回的标签",[2246,2301,2302,2307],{},[2261,2303,2304],{},[26,2305,2306],{},"Symbol.hasInstance",[2261,2308,2309,2310,2313],{},"自定义 ",[26,2311,2312],{},"instanceof"," 行为",[2246,2315,2316,2321],{},[2261,2317,2318],{},[26,2319,2320],{},"Symbol.species",[2261,2322,2323,2324,2327],{},"控制衍生对象构造函数（如 ",[26,2325,2326],{},"map.filter()"," 返回的类型）",[2246,2329,2330,2335],{},[2261,2331,2332],{},[26,2333,2334],{},"Symbol.toPrimitive",[2261,2336,2337],{},"自定义对象转换为原始值的行为",[2246,2339,2340,2345],{},[2261,2341,2342],{},[26,2343,2344],{},"Symbol.unscopables",[2261,2346,2347,2348,2351],{},"避免某些属性被 ",[26,2349,2350],{},"with"," 环境引入",[358,2353,2355,2356,2313],{"id":2354},"示例自定义-forof-行为","示例：自定义 ",[26,2357,2271],{},[133,2359,2361],{"className":135,"code":2360,"language":137,"meta":138,"style":138},"const iterableObj = {\n    data: [1, 2, 3],\n    [Symbol.iterator]() {\n        let index = 0;\n        return {\n            next: () => ({\n                value: this.data[index],\n                done: index++ >= this.data.length,\n            }),\n        };\n    },\n};\nfor (const val of iterableObj) console.log(val); \u002F\u002F 1,2,3\n",[26,2362,2363,2374,2396,2410,2424,2431,2447,2472,2499,2508,2513,2518,2522],{"__ignoreMap":138},[142,2364,2365,2367,2370,2372],{"class":144,"line":145},[142,2366,149],{"class":148},[142,2368,2369],{"class":152}," iterableObj",[142,2371,157],{"class":156},[142,2373,492],{"class":171},[142,2375,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394],{"class":144,"line":175},[142,2377,522],{"class":188},[142,2379,192],{"class":171},[142,2381,630],{"class":167},[142,2383,633],{"class":195},[142,2385,217],{"class":171},[142,2387,638],{"class":195},[142,2389,217],{"class":171},[142,2391,647],{"class":195},[142,2393,650],{"class":167},[142,2395,1262],{"class":171},[142,2397,2398,2401,2403,2406,2408],{"class":144,"line":202},[142,2399,2400],{"class":167},"    [Symbol",[142,2402,208],{"class":171},[142,2404,2405],{"class":167},"iterator]",[142,2407,168],{"class":171},[142,2409,492],{"class":171},[142,2411,2412,2415,2418,2420,2422],{"class":144,"line":236},[142,2413,2414],{"class":148},"        let",[142,2416,2417],{"class":167}," index",[142,2419,157],{"class":156},[142,2421,456],{"class":195},[142,2423,172],{"class":171},[142,2425,2426,2429],{"class":144,"line":264},[142,2427,2428],{"class":980},"        return",[142,2430,492],{"class":171},[142,2432,2433,2436,2438,2440,2442,2444],{"class":144,"line":293},[142,2434,2435],{"class":163},"            next",[142,2437,192],{"class":171},[142,2439,486],{"class":171},[142,2441,489],{"class":148},[142,2443,984],{"class":188},[142,2445,2446],{"class":171},"{\n",[142,2448,2449,2452,2454,2458,2460,2463,2465,2468,2470],{"class":144,"line":519},[142,2450,2451],{"class":188},"                value",[142,2453,192],{"class":171},[142,2455,2457],{"class":2456},"s39Yj"," this",[142,2459,208],{"class":171},[142,2461,2462],{"class":167},"data",[142,2464,1466],{"class":188},[142,2466,2467],{"class":167},"index",[142,2469,650],{"class":188},[142,2471,1262],{"class":171},[142,2473,2474,2477,2479,2481,2483,2486,2488,2490,2492,2494,2497],{"class":144,"line":535},[142,2475,2476],{"class":188},"                done",[142,2478,192],{"class":171},[142,2480,2417],{"class":167},[142,2482,530],{"class":156},[142,2484,2485],{"class":156}," >=",[142,2487,2457],{"class":2456},[142,2489,208],{"class":171},[142,2491,2462],{"class":167},[142,2493,208],{"class":171},[142,2495,2496],{"class":152},"length",[142,2498,1262],{"class":171},[142,2500,2501,2504,2506],{"class":144,"line":545},[142,2502,2503],{"class":171},"            }",[142,2505,231],{"class":188},[142,2507,1262],{"class":171},[142,2509,2510],{"class":144,"line":792},[142,2511,2512],{"class":171},"        };\n",[142,2514,2515],{"class":144,"line":798},[142,2516,2517],{"class":171},"    },\n",[142,2519,2520],{"class":144,"line":847},[142,2521,2213],{"class":171},[142,2523,2524,2527,2529,2531,2534,2537,2540,2542,2544,2547,2549],{"class":144,"line":853},[142,2525,2526],{"class":980},"for",[142,2528,984],{"class":167},[142,2530,149],{"class":148},[142,2532,2533],{"class":152}," val",[142,2535,2536],{"class":156}," of",[142,2538,2539],{"class":167}," iterableObj) console",[142,2541,208],{"class":171},[142,2543,272],{"class":163},[142,2545,2546],{"class":167},"(val)",[142,2548,286],{"class":171},[142,2550,2551],{"class":289}," \u002F\u002F 1,2,3\n",[358,2553,2555,2556],{"id":2554},"示例tostringtag","示例：",[26,2557,2558],{},"toStringTag",[133,2560,2562],{"className":135,"code":2561,"language":137,"meta":138,"style":138},"class MyClass {}\nObject.prototype.toString.call(new MyClass()); \u002F\u002F \"[object Object]\"\nMyClass.prototype[Symbol.toStringTag] = \"MyClass\";\nObject.prototype.toString.call(new MyClass()); \u002F\u002F \"[object MyClass]\"\n",[26,2563,2564,2576,2611,2638],{"__ignoreMap":138},[142,2565,2566,2569,2573],{"class":144,"line":145},[142,2567,2568],{"class":148},"class",[142,2570,2572],{"class":2571},"sbgvK"," MyClass",[142,2574,2575],{"class":171}," {}\n",[142,2577,2578,2582,2584,2587,2589,2591,2593,2596,2598,2601,2603,2606,2608],{"class":144,"line":175},[142,2579,2581],{"class":2580},"sZMiF","Object",[142,2583,208],{"class":171},[142,2585,2586],{"class":152},"prototype",[142,2588,208],{"class":171},[142,2590,2066],{"class":167},[142,2592,208],{"class":171},[142,2594,2595],{"class":163},"call",[142,2597,245],{"class":167},[142,2599,2600],{"class":156},"new",[142,2602,2572],{"class":163},[142,2604,2605],{"class":167},"())",[142,2607,286],{"class":171},[142,2609,2610],{"class":289}," \u002F\u002F \"[object Object]\"\n",[142,2612,2613,2616,2618,2620,2623,2625,2628,2630,2632,2634,2636],{"class":144,"line":202},[142,2614,2615],{"class":2580},"MyClass",[142,2617,208],{"class":171},[142,2619,2586],{"class":152},[142,2621,2622],{"class":167},"[Symbol",[142,2624,208],{"class":171},[142,2626,2627],{"class":167},"toStringTag] ",[142,2629,1479],{"class":156},[142,2631,221],{"class":220},[142,2633,2615],{"class":224},[142,2635,228],{"class":220},[142,2637,172],{"class":171},[142,2639,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664],{"class":144,"line":236},[142,2641,2581],{"class":2580},[142,2643,208],{"class":171},[142,2645,2586],{"class":152},[142,2647,208],{"class":171},[142,2649,2066],{"class":167},[142,2651,208],{"class":171},[142,2653,2595],{"class":163},[142,2655,245],{"class":167},[142,2657,2600],{"class":156},[142,2659,2572],{"class":163},[142,2661,2605],{"class":167},[142,2663,286],{"class":171},[142,2665,2666],{"class":289}," \u002F\u002F \"[object MyClass]\"\n",[74,2668,2670,2671,33,2674,2272],{"id":2669},"_3-全局注册表symbolforsymbolkeyfor","3. 全局注册表（",[26,2672,2673],{},"Symbol.for",[26,2675,2676],{},"Symbol.keyFor",[23,2678,2679],{},"需要跨模块共享同一个 Symbol 时可使用全局注册表。",[133,2681,2683],{"className":135,"code":2682,"language":137,"meta":138,"style":138},"const s1 = Symbol.for(\"app.foo\");\nconst s2 = Symbol.for(\"app.foo\");\nconsole.log(s1 === s2); \u002F\u002F true\nconsole.log(Symbol.keyFor(s1)); \u002F\u002F 'app.foo'\n",[26,2684,2685,2713,2740,2761],{"__ignoreMap":138},[142,2686,2687,2689,2692,2694,2696,2698,2700,2702,2704,2707,2709,2711],{"class":144,"line":145},[142,2688,149],{"class":148},[142,2690,2691],{"class":152}," s1",[142,2693,157],{"class":156},[142,2695,2153],{"class":167},[142,2697,208],{"class":171},[142,2699,2526],{"class":163},[142,2701,245],{"class":167},[142,2703,228],{"class":220},[142,2705,2706],{"class":224},"app.foo",[142,2708,228],{"class":220},[142,2710,231],{"class":167},[142,2712,172],{"class":171},[142,2714,2715,2717,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738],{"class":144,"line":175},[142,2716,149],{"class":148},[142,2718,2719],{"class":152}," s2",[142,2721,157],{"class":156},[142,2723,2153],{"class":167},[142,2725,208],{"class":171},[142,2727,2526],{"class":163},[142,2729,245],{"class":167},[142,2731,228],{"class":220},[142,2733,2706],{"class":224},[142,2735,228],{"class":220},[142,2737,231],{"class":167},[142,2739,172],{"class":171},[142,2741,2742,2744,2746,2748,2751,2754,2757,2759],{"class":144,"line":202},[142,2743,267],{"class":167},[142,2745,208],{"class":171},[142,2747,272],{"class":163},[142,2749,2750],{"class":167},"(s1 ",[142,2752,2753],{"class":156},"===",[142,2755,2756],{"class":167}," s2)",[142,2758,286],{"class":171},[142,2760,1598],{"class":289},[142,2762,2763,2765,2767,2769,2772,2774,2777,2780,2782],{"class":144,"line":236},[142,2764,267],{"class":167},[142,2766,208],{"class":171},[142,2768,272],{"class":163},[142,2770,2771],{"class":167},"(Symbol",[142,2773,208],{"class":171},[142,2775,2776],{"class":163},"keyFor",[142,2778,2779],{"class":167},"(s1))",[142,2781,286],{"class":171},[142,2783,2784],{"class":289}," \u002F\u002F 'app.foo'\n",[56,2786,2787],{"id":2787},"总结",[2240,2789,2790,2800],{},[2243,2791,2792],{},[2246,2793,2794,2797],{},[2249,2795,2796],{},"特性",[2249,2798,2799],{},"核心要点",[2256,2801,2802,2816,2830,2844,2860],{},[2246,2803,2804,2810],{},[2261,2805,2806,29,2808],{},[26,2807,28],{},[26,2809,36],{},[2261,2811,2812,2813,2815],{},"任意键；",[26,2814,36],{}," 弱引用对象键，用于缓存和 DOM 关联，自动回收",[2246,2817,2818,2824],{},[2261,2819,2820,29,2822],{},[26,2821,32],{},[26,2823,39],{},[2261,2825,2826,2827,2829],{},"值唯一；",[26,2828,39],{}," 存储对象弱引用，标记状态",[2246,2831,2832,2835],{},[2261,2833,2834],{},"数组高阶方法",[2261,2836,2837,2840,2841,2843],{},[26,2838,2839],{},"map\u002Ffilter\u002Freduce"," 等实现函数式数据处理，",[26,2842,1637],{}," 映射展平",[2246,2845,2846,2851],{},[2261,2847,2848,2850],{},[26,2849,1755],{}," + 视图",[2261,2852,2853,2854,2856,2857,2859],{},"操作二进制数据：",[26,2855,43],{}," 固定类型存取，",[26,2858,1953],{}," 灵活控制字节序",[2246,2861,2862,2866],{},[2261,2863,2864],{},[26,2865,47],{},[2261,2867,2868,2869,33,2871,2874],{},"唯一属性键，内置符号定制语言底层行为（迭代器、",[26,2870,2066],{},[26,2872,2873],{},"hasInstance"," 等）",[23,2876,2877],{},"掌握这些内容，能让你在处理复杂数据结构、内存密集型任务和元编程时游刃有余。",[56,2879,2880],{"id":2880},"参考文献",[23,2882,2883],{},"以下链接在编写时均可正常访问：",[2240,2885,2886,2896],{},[2243,2887,2888],{},[2246,2889,2890,2893],{},[2249,2891,2892],{},"资料",[2249,2894,2895],{},"说明",[2256,2897,2898,2910,2921,2932,2944],{},[2246,2899,2900,2908],{},[2261,2901,2902],{},[50,2903,2907],{"href":2904,"rel":2905},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FMap",[2906],"nofollow","MDN：Map",[2261,2909,28],{},[2246,2911,2912,2919],{},[2261,2913,2914],{},[50,2915,2918],{"href":2916,"rel":2917},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FWeakMap",[2906],"MDN：WeakMap",[2261,2920,36],{},[2246,2922,2923,2930],{},[2261,2924,2925],{},[50,2926,2929],{"href":2927,"rel":2928},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FSet",[2906],"MDN：Set",[2261,2931,32],{},[2246,2933,2934,2941],{},[2261,2935,2936],{},[50,2937,2940],{"href":2938,"rel":2939},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FTypedArray",[2906],"MDN：TypedArray",[2261,2942,2943],{},"类型数组",[2246,2945,2946,2953],{},[2261,2947,2948],{},[50,2949,2952],{"href":2950,"rel":2951},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FSymbol",[2906],"MDN：Symbol",[2261,2954,47],{},[2956,2957,2958],"style",{},"html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":138,"searchDepth":175,"depth":175,"links":2960},[2961,2967,2973,2986,2995,3001,3002],{"id":58,"depth":175,"text":59,"children":2962},[2963,2965],{"id":76,"depth":202,"text":2964},"1. Map 的特点",{"id":314,"depth":202,"text":2966},"2. WeakMap 的特点",{"id":551,"depth":175,"text":552,"children":2968},[2969,2971],{"id":563,"depth":202,"text":2970},"1. Set 的特点",{"id":900,"depth":202,"text":2972},"2. WeakSet 的特点",{"id":1034,"depth":175,"text":1035,"children":2974},[2975,2977,2979,2981,2983,2985],{"id":1041,"depth":202,"text":2976},"1. map – 映射",{"id":1118,"depth":202,"text":2978},"2. filter – 过滤",{"id":1169,"depth":202,"text":2980},"3. reduce – 累计（最强大）",{"id":1535,"depth":202,"text":2982},"4. some \u002F every – 测试元素",{"id":1633,"depth":202,"text":2984},"5. flatMap – 映射后展平一层",{"id":1727,"depth":202,"text":1727},{"id":1745,"depth":175,"text":1746,"children":2987},[2988,2990,2992,2994],{"id":1752,"depth":202,"text":2989},"1. ArrayBuffer",{"id":1817,"depth":202,"text":2991},"2. TypedArray（类型数组）",{"id":1950,"depth":202,"text":2993},"3. DataView",{"id":2102,"depth":202,"text":360},{"id":2119,"depth":175,"text":2120,"children":2996},[2997,2998,2999],{"id":2136,"depth":202,"text":2137},{"id":2237,"depth":202,"text":2238},{"id":2669,"depth":202,"text":3000},"3. 全局注册表（Symbol.for、Symbol.keyFor）",{"id":2787,"depth":175,"text":2787},{"id":2880,"depth":175,"text":2880},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fweb\u002FJs\u002Fmap-set","knowledge\u002Fknowledge\u002Fbooklet\u002Fweb\u002FJs\u002Fmap-set.md","md",{"items":3008},[3009,3013,3017,3021,3025,3029],{"path":3010,"title":3011,"description":3012,"category":10,"score":293},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Ferror","错误处理与调试","结构化错误类型、try\u002Fcatch 与全局未捕获处理是健壮应用的基础。",{"path":3014,"title":3015,"description":3016,"category":10,"score":293},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fdom-bom","浏览器相关 API","DOM 事件、存储、fetch、Worker、Observer 等由浏览器提供的 Web API（非 ECMAScript 核心）。HTML 结构见 标签。",{"path":3018,"title":3019,"description":3020,"category":10,"score":293},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fperformance","性能优化","防抖\u002F节流、渲染与内存、资源预加载及引擎行为是前端性能的主要抓手。相关 CSS 见 视觉效果、Head 资源提示。",{"path":3022,"title":3023,"description":3024,"category":10,"score":293},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fcommon","模块化与工程化","ESM、CommonJS 与打包工具（Tree Shaking、代码分割）是前端工程化的基础。入门见 JavaScript 基础 · 模块。",{"path":3026,"title":3027,"description":3028,"category":10,"score":293},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fscope","执行模型与作用域","执行上下文与词法作用域决定变量在何处可访问、闭包如何形成，以及 var \u002F let \u002F const 的差异。语言概览见 JavaScript 基础。",{"path":52,"title":3030,"description":3031,"category":10,"score":293},"JavaScript 基础","JavaScript（ECMAScript）是 Web 页面与 Node.js 等运行时的脚本语言：在浏览器中操作 DOM、发起网络请求；在服务端处理 I\u002FO。语法与 HTML、CSS 配合构成前端技术栈。",{"series":3033,"title":137,"items":3034,"index":535,"prev":3076,"next":3077},"booklet\u002Fweb\u002Fjs",[3035,3039,3041,3043,3047,3049,3051,3055,3059,3060,3062,3066,3070,3074],{"path":3036,"title":3037,"date":3038,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fadvanced","函数进阶","2022-10-24",{"path":52,"title":3030,"date":3040,"pinned":15},"2023-11-24",{"path":3022,"title":3023,"date":3042,"pinned":15},"2025-06-21",{"path":3044,"title":3045,"date":3046,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fdesign","设计模式","2021-10-05",{"path":3014,"title":3015,"date":3048,"pinned":15},"2025-07-10",{"path":3010,"title":3011,"date":3050,"pinned":15},"2026-06-25",{"path":3052,"title":3053,"date":3054,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fevent-loop","异步编程与事件循环","2020-03-23",{"path":3056,"title":3057,"date":3058,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fexec","正则表达式","2022-05-21",{"path":7,"title":8,"date":14,"pinned":15},{"path":3018,"title":3019,"date":3061,"pinned":15},"2025-07-04",{"path":3063,"title":3064,"date":3065,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fprototype","原型与面向对象","2020-04-13",{"path":3067,"title":3068,"date":3069,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fproxy","代理与反射","2022-10-23",{"path":3071,"title":3072,"date":3073,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fsafe","安全","2023-06-26",{"path":3026,"title":3027,"date":3075,"pinned":15},"2025-01-29",{"path":3056,"title":3057,"date":3058,"pinned":15},{"path":3018,"title":3019,"date":3061,"pinned":15}]