许勃 發表於 2022-9-8 16:20:00

常用的工具函数助力JavaScript高效开发

<h2 data-tool="mdnice编辑器"><img src="https://img2022.cnblogs.com/blog/1161361/202209/1161361-20220908162016078-135762343.png" alt="" loading="lazy"></h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2 data-tool="mdnice编辑器">前言</h2>
<p data-tool="mdnice编辑器">日常开发中,面对各种不同的需求,我们经常会用到以前开发过的一些工具函数,把这些工具函数收集起来,将大大提高我们的开发效率。</p>
<h2 data-tool="mdnice编辑器">1、校验数据类型</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;typeOf&nbsp;=&nbsp;function(obj)&nbsp;{<br>&nbsp;&nbsp;return&nbsp;Object.prototype.toString.call(obj).slice(8,&nbsp;-1).toLowerCase()<br>}<br><br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>typeOf('树哥')&nbsp;&nbsp;//&nbsp;string<br>typeOf([])&nbsp;&nbsp;//&nbsp;array<br>typeOf(new&nbsp;Date())&nbsp;&nbsp;//&nbsp;date<br>typeOf(null)&nbsp;//&nbsp;null<br>typeOf(true)&nbsp;//&nbsp;boolean<br>typeOf(()&nbsp;=&gt;&nbsp;{&nbsp;})&nbsp;//&nbsp;function<br><br></code></pre>
<h2 data-tool="mdnice编辑器">2、防抖</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;debounce&nbsp;=&nbsp;(()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;let&nbsp;timer&nbsp;=&nbsp;null<br>&nbsp;&nbsp;return&nbsp;(callback,&nbsp;wait&nbsp;=&nbsp;800)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;timer&amp;&amp;clearTimeout(timer)<br>&nbsp;&nbsp;&nbsp;&nbsp;timer&nbsp;=&nbsp;setTimeout(callback,&nbsp;wait)<br>&nbsp;&nbsp;}<br>})()<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<p data-tool="mdnice编辑器">如 vue 中使用</p>
<pre data-tool="mdnice编辑器"><code>methods:&nbsp;{<br>&nbsp;&nbsp;loadList()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;debounce(()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('加载数据')<br>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;500)<br>&nbsp;&nbsp;}<br>}<br></code></pre>
<h2 data-tool="mdnice编辑器">3、节流</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;throttle&nbsp;=&nbsp;(()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;let&nbsp;last&nbsp;=&nbsp;0<br>&nbsp;&nbsp;return&nbsp;(callback,&nbsp;wait&nbsp;=&nbsp;800)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;now&nbsp;=&nbsp;+new&nbsp;Date()<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(now&nbsp;-&nbsp;last&nbsp;&gt;&nbsp;wait)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;=&nbsp;now<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>})()<br></code></pre>
<h2 data-tool="mdnice编辑器">4、手机号脱敏</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;hideMobile&nbsp;=&nbsp;(mobile)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;return&nbsp;mobile.replace(/^(\d{3})\d{4}(\d{4})$/,&nbsp;"$1****$2")<br>}<br></code></pre>
<h2 data-tool="mdnice编辑器">5、开启全屏</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;launchFullscreen&nbsp;=&nbsp;(element)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;if&nbsp;(element.requestFullscreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;element.requestFullscreen()<br>&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(element.mozRequestFullScreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;element.mozRequestFullScreen()<br>&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(element.msRequestFullscreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;element.msRequestFullscreen()<br>&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(element.webkitRequestFullscreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;element.webkitRequestFullScreen()<br>&nbsp;&nbsp;}<br>}<br></code></pre>
<h2 data-tool="mdnice编辑器">6、关闭全屏</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;exitFullscreen&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;if&nbsp;(document.exitFullscreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;document.exitFullscreen()<br>&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(document.msExitFullscreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;document.msExitFullscreen()<br>&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(document.mozCancelFullScreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;document.mozCancelFullScreen()<br>&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(document.webkitExitFullscreen)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;document.webkitExitFullscreen()<br>&nbsp;&nbsp;}<br>}<br></code></pre>
<h2 data-tool="mdnice编辑器">7、大小写转换</h2>
<p data-tool="mdnice编辑器"><strong>参数:</strong></p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>str 待转换的字符串</li>
<li>type 1-全大写 2-全小写 3-首字母大写</li>
</ul>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;turnCase&nbsp;=&nbsp;(str,&nbsp;type)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;switch&nbsp;(type)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;str.toUpperCase()<br>&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;str.toLowerCase()<br>&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return&nbsp;str.toUpperCase()&nbsp;+&nbsp;str.substr(1).toLowerCase()&nbsp;//&nbsp;substr&nbsp;已不推荐使用<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;str.toUpperCase()&nbsp;+&nbsp;str.substring(1).toLowerCase()<br>&nbsp;&nbsp;&nbsp;&nbsp;default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;str<br>&nbsp;&nbsp;}<br>}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>turnCase('vue',&nbsp;1)&nbsp;//&nbsp;VUE<br>turnCase('REACT',&nbsp;2)&nbsp;//&nbsp;react<br>turnCase('vue',&nbsp;3)&nbsp;//&nbsp;Vue<br></code></pre>
<h2 data-tool="mdnice编辑器">8、解析URL参数</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;getSearchParams&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;const&nbsp;searchPar&nbsp;=&nbsp;new&nbsp;URLSearchParams(window.location.search)<br>&nbsp;&nbsp;const&nbsp;paramsObj&nbsp;=&nbsp;{}<br>&nbsp;&nbsp;for&nbsp;(const&nbsp;&nbsp;of&nbsp;searchPar.entries())&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;paramsObj&nbsp;=&nbsp;value<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return&nbsp;paramsObj<br>}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>//&nbsp;假设目前位于&nbsp;https://****com/index?id=154513&amp;age=18;<br>getSearchParams();&nbsp;//&nbsp;{id:&nbsp;"154513",&nbsp;age:&nbsp;"18"}<br></code></pre>
<h2 data-tool="mdnice编辑器">9、判断手机是Andoird还是IOS</h2>
<pre data-tool="mdnice编辑器"><code>/**&nbsp;<br>&nbsp;*&nbsp;1:&nbsp;ios<br>&nbsp;*&nbsp;2:&nbsp;android<br>&nbsp;*&nbsp;3:&nbsp;其它<br>&nbsp;*/<br>export&nbsp;const&nbsp;getOSType=()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;let&nbsp;u&nbsp;=&nbsp;navigator.userAgent,&nbsp;app&nbsp;=&nbsp;navigator.appVersion;<br>&nbsp;&nbsp;let&nbsp;isAndroid&nbsp;=&nbsp;u.indexOf('Android')&nbsp;&gt;&nbsp;-1&nbsp;||&nbsp;u.indexOf('Linux')&nbsp;&gt;&nbsp;-1;<br>&nbsp;&nbsp;let&nbsp;isIOS&nbsp;=&nbsp;!!u.match(/\(i[^;]+;(&nbsp;U;)?&nbsp;CPU.+Mac&nbsp;OS&nbsp;X/);<br>&nbsp;&nbsp;if&nbsp;(isIOS)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if&nbsp;(isAndroid)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;2;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return&nbsp;3;<br>}<br></code></pre>
<h2 data-tool="mdnice编辑器">10、数组对象根据字段去重</h2>
<p data-tool="mdnice编辑器"><strong>参数:</strong></p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>arr 要去重的数组</li>
<li>key 根据去重的字段名</li>
</ul>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;uniqueArrayObject&nbsp;=&nbsp;(arr&nbsp;=&nbsp;[],&nbsp;key&nbsp;=&nbsp;'id')&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;if&nbsp;(arr.length&nbsp;===&nbsp;0)&nbsp;return<br>&nbsp;&nbsp;let&nbsp;list&nbsp;=&nbsp;[]<br>&nbsp;&nbsp;const&nbsp;map&nbsp;=&nbsp;{}<br>&nbsp;&nbsp;arr.forEach((item)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!map])&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map]&nbsp;=&nbsp;item<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;})<br>&nbsp;&nbsp;list&nbsp;=&nbsp;Object.values(map)<br><br>&nbsp;&nbsp;return&nbsp;list<br>}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>const&nbsp;responseList&nbsp;=&nbsp;[<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;1,&nbsp;name:&nbsp;'树哥'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;2,&nbsp;name:&nbsp;'黄老爷'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;3,&nbsp;name:&nbsp;'张麻子'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;1,&nbsp;name:&nbsp;'黄老爷'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;2,&nbsp;name:&nbsp;'张麻子'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;3,&nbsp;name:&nbsp;'树哥'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;1,&nbsp;name:&nbsp;'树哥'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;2,&nbsp;name:&nbsp;'黄老爷'&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;id:&nbsp;3,&nbsp;name:&nbsp;'张麻子'&nbsp;},<br>]<br><br>uniqueArrayObject(responseList,&nbsp;'id')<br>//&nbsp;[{&nbsp;id:&nbsp;1,&nbsp;name:&nbsp;'树哥'&nbsp;},{&nbsp;id:&nbsp;2,&nbsp;name:&nbsp;'黄老爷'&nbsp;},{&nbsp;id:&nbsp;3,&nbsp;name:&nbsp;'张麻子'&nbsp;}]<br></code></pre>
<h2 data-tool="mdnice编辑器">11、滚动到页面顶部</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;scrollToTop&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;const&nbsp;height&nbsp;=&nbsp;document.documentElement.scrollTop&nbsp;||&nbsp;document.body.scrollTop;<br>&nbsp;&nbsp;if&nbsp;(height&nbsp;&gt;&nbsp;0)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;window.requestAnimationFrame(scrollToTop);<br>&nbsp;&nbsp;&nbsp;&nbsp;window.scrollTo(0,&nbsp;height&nbsp;-&nbsp;height&nbsp;/&nbsp;8);<br>&nbsp;&nbsp;}<br>}<br></code></pre>
<h2 data-tool="mdnice编辑器">12、滚动到元素位置</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;smoothScroll&nbsp;=&nbsp;element&nbsp;=&gt;{<br>&nbsp;&nbsp;&nbsp;&nbsp;document.querySelector(element).scrollIntoView({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;behavior:&nbsp;'smooth'<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>};<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>smoothScroll('#target');&nbsp;//&nbsp;平滑滚动到&nbsp;ID&nbsp;为&nbsp;target&nbsp;的元素<br></code></pre>
<h2 data-tool="mdnice编辑器">13、uuid</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;uuid&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;const&nbsp;temp_url&nbsp;=&nbsp;URL.createObjectURL(new&nbsp;Blob())<br>&nbsp;&nbsp;const&nbsp;uuid&nbsp;=&nbsp;temp_url.toString()<br>&nbsp;&nbsp;URL.revokeObjectURL(temp_url)&nbsp;//释放这个url<br>&nbsp;&nbsp;return&nbsp;uuid.substring(uuid.lastIndexOf('/')&nbsp;+&nbsp;1)<br>}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>uuid()&nbsp;//&nbsp;a640be34-689f-4b98-be77-e3972f9bffdd<br></code></pre>
<blockquote data-tool="mdnice编辑器">
<p>不过要吐槽一句的是,uuid一般应由后端来进行生成</p>
</blockquote>
<h2 data-tool="mdnice编辑器">14、金额格式化</h2>
<p data-tool="mdnice编辑器"><strong>参数:</strong></p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>{number} number:要格式化的数字</li>
<li>{number} decimals:保留几位小数</li>
<li>{string} dec_point:小数点符号</li>
<li>{string} thousands_sep:千分位符号</li>
</ul>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;moneyFormat&nbsp;=&nbsp;(number,&nbsp;decimals,&nbsp;dec_point,&nbsp;thousands_sep)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;number&nbsp;=&nbsp;(number&nbsp;+&nbsp;'').replace(/[^0-9+-Ee.]/g,&nbsp;'')<br>&nbsp;&nbsp;const&nbsp;n&nbsp;=&nbsp;!isFinite(+number)&nbsp;?&nbsp;0&nbsp;:&nbsp;+number<br>&nbsp;&nbsp;const&nbsp;prec&nbsp;=&nbsp;!isFinite(+decimals)&nbsp;?&nbsp;2&nbsp;:&nbsp;Math.abs(decimals)<br>&nbsp;&nbsp;const&nbsp;sep&nbsp;=&nbsp;typeof&nbsp;thousands_sep&nbsp;===&nbsp;'undefined'&nbsp;?&nbsp;','&nbsp;:&nbsp;thousands_sep<br>&nbsp;&nbsp;const&nbsp;dec&nbsp;=&nbsp;typeof&nbsp;dec_point&nbsp;===&nbsp;'undefined'&nbsp;?&nbsp;'.'&nbsp;:&nbsp;dec_point<br>&nbsp;&nbsp;let&nbsp;s&nbsp;=&nbsp;''<br>&nbsp;&nbsp;const&nbsp;toFixedFix&nbsp;=&nbsp;function(n,&nbsp;prec)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;k&nbsp;=&nbsp;Math.pow(10,&nbsp;prec)<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;''&nbsp;+&nbsp;Math.ceil(n&nbsp;*&nbsp;k)&nbsp;/&nbsp;k<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;s&nbsp;=&nbsp;(prec&nbsp;?&nbsp;toFixedFix(n,&nbsp;prec)&nbsp;:&nbsp;''&nbsp;+&nbsp;Math.round(n)).split('.')<br>&nbsp;&nbsp;const&nbsp;re&nbsp;=&nbsp;/(-?\d+)(\d{3})/<br>&nbsp;&nbsp;while&nbsp;(re.test(s))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;s.replace(re,&nbsp;'$1'&nbsp;+&nbsp;sep&nbsp;+&nbsp;'$2')<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;if&nbsp;((s&nbsp;||&nbsp;'').length&nbsp;&lt;&nbsp;prec)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;s&nbsp;||&nbsp;''<br>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;+=&nbsp;new&nbsp;Array(prec&nbsp;-&nbsp;s.length&nbsp;+&nbsp;1).join('0')<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return&nbsp;s.join(dec)<br>}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>moneyFormat(10000000)&nbsp;//&nbsp;10,000,000.00<br>moneyFormat(10000000,&nbsp;3,&nbsp;'.',&nbsp;'-')&nbsp;//&nbsp;10-000-000.000<br></code></pre>
<h2 data-tool="mdnice编辑器">15、存储操作</h2>
<pre data-tool="mdnice编辑器"><code>class&nbsp;MyCache&nbsp;{<br>&nbsp;&nbsp;constructor(isLocal&nbsp;=&nbsp;true)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;this.storage&nbsp;=&nbsp;isLocal&nbsp;?&nbsp;localStorage&nbsp;:&nbsp;sessionStorage<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;setItem(key,&nbsp;value)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(typeof&nbsp;(value)&nbsp;===&nbsp;'object')&nbsp;value&nbsp;=&nbsp;JSON.stringify(value)<br>&nbsp;&nbsp;&nbsp;&nbsp;this.storage.setItem(key,&nbsp;value)<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;getItem(key)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;JSON.parse(this.storage.getItem(key))<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(err)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.storage.getItem(key)<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;removeItem(key)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;this.storage.removeItem(key)<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;clear()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;this.storage.clear()<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;key(index)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.storage.key(index)<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;length()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.storage.length<br>&nbsp;&nbsp;}<br>}<br><br>const&nbsp;localCache&nbsp;=&nbsp;new&nbsp;MyCache()<br>const&nbsp;sessionCache&nbsp;=&nbsp;new&nbsp;MyCache(false)<br><br>export&nbsp;{&nbsp;localCache,&nbsp;sessionCache&nbsp;}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>localCache.getItem('user')<br>sessionCache.setItem('name','树哥')<br>sessionCache.getItem('token')<br>localCache.clear()<br></code></pre>
<h2 data-tool="mdnice编辑器">16、下载文件</h2>
<p data-tool="mdnice编辑器"><strong>参数:</strong></p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>api 接口</li>
<li>params 请求参数</li>
<li>fileName 文件名</li>
</ul>
<pre data-tool="mdnice编辑器"><code>const&nbsp;downloadFile&nbsp;=&nbsp;(api,&nbsp;params,&nbsp;fileName,&nbsp;type&nbsp;=&nbsp;'get')&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;axios({<br>&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;type,<br>&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;api,<br>&nbsp;&nbsp;&nbsp;&nbsp;responseType:&nbsp;'blob',&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;params<br>&nbsp;&nbsp;}).then((res)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;str&nbsp;=&nbsp;res.headers['content-disposition']<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!res&nbsp;||&nbsp;!str)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;suffix&nbsp;=&nbsp;''<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;截取文件名和文件类型<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(str.lastIndexOf('.'))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName&nbsp;?&nbsp;''&nbsp;:&nbsp;fileName&nbsp;=&nbsp;decodeURI(str.substring(str.indexOf('=')&nbsp;+&nbsp;1,&nbsp;str.lastIndexOf('.')))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;suffix&nbsp;=&nbsp;str.substring(str.lastIndexOf('.'),&nbsp;str.length)<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;如果支持微软的文件下载方式(ie10+浏览器)<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(window.navigator.msSaveBlob)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;blobObject&nbsp;=&nbsp;new&nbsp;Blob();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.navigator.msSaveBlob(blobObject,&nbsp;fileName&nbsp;+&nbsp;suffix);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(e)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;其他浏览器<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;url&nbsp;=&nbsp;window.URL.createObjectURL(res.data)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;link&nbsp;=&nbsp;document.createElement('a')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.style.display&nbsp;=&nbsp;'none'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.href&nbsp;=&nbsp;url<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.setAttribute('download',&nbsp;fileName&nbsp;+&nbsp;suffix)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(link)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.click()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.removeChild(link)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.URL.revokeObjectURL(link.href);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}).catch((err)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;console.log(err.message);<br>&nbsp;&nbsp;})<br>}`<br></code></pre>
<p data-tool="mdnice编辑器"><strong>使用:</strong></p>
<pre data-tool="mdnice编辑器"><code>downloadFile('/api/download',&nbsp;{id},&nbsp;'文件名')<br></code></pre>
<h2 data-tool="mdnice编辑器">17、时间操作</h2>
<p data-tool="mdnice编辑器">关于时间操作,没必要自己再写一大串代码了,强烈推荐使用&nbsp;day.js<sup></sup></p>
<blockquote data-tool="mdnice编辑器">
<p>Day.js 是一个仅 2kb 大小的轻量级 JavaScript 时间日期处理库,下载、解析和执行的JavaScript更少,为代码留下更多的时间。</p>
</blockquote>
<h2 data-tool="mdnice编辑器">18、深拷贝</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;clone&nbsp;=&nbsp;parent&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;//&nbsp;判断类型<br>&nbsp;&nbsp;const&nbsp;isType&nbsp;=&nbsp;(obj,&nbsp;type)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(typeof&nbsp;obj&nbsp;!==&nbsp;"object")&nbsp;return&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;typeString&nbsp;=&nbsp;Object.prototype.toString.call(obj);<br>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;flag;<br>&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(type)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;"Array":<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;typeString&nbsp;===&nbsp;"";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;"Date":<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;typeString&nbsp;===&nbsp;"";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;"RegExp":<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;typeString&nbsp;===&nbsp;"";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;flag;<br>&nbsp;&nbsp;};<br><br>&nbsp;&nbsp;//&nbsp;处理正则<br>&nbsp;&nbsp;const&nbsp;getRegExp&nbsp;=&nbsp;re&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;flags&nbsp;=&nbsp;"";<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(re.global)&nbsp;flags&nbsp;+=&nbsp;"g";<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(re.ignoreCase)&nbsp;flags&nbsp;+=&nbsp;"i";<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(re.multiline)&nbsp;flags&nbsp;+=&nbsp;"m";<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;flags;<br>&nbsp;&nbsp;};<br>&nbsp;&nbsp;//&nbsp;维护两个储存循环引用的数组<br>&nbsp;&nbsp;const&nbsp;parents&nbsp;=&nbsp;[];<br>&nbsp;&nbsp;const&nbsp;children&nbsp;=&nbsp;[];<br><br>&nbsp;&nbsp;const&nbsp;_clone&nbsp;=&nbsp;parent&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(parent&nbsp;===&nbsp;null)&nbsp;return&nbsp;null;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(typeof&nbsp;parent&nbsp;!==&nbsp;"object")&nbsp;return&nbsp;parent;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;child,&nbsp;proto;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isType(parent,&nbsp;"Array"))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;对数组做特殊处理<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;[];<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(isType(parent,&nbsp;"RegExp"))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;对正则对象做特殊处理<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;new&nbsp;RegExp(parent.source,&nbsp;getRegExp(parent));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(parent.lastIndex)&nbsp;child.lastIndex&nbsp;=&nbsp;parent.lastIndex;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(isType(parent,&nbsp;"Date"))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;对Date对象做特殊处理<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;new&nbsp;Date(parent.getTime());<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;处理对象原型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proto&nbsp;=&nbsp;Object.getPrototypeOf(parent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;利用Object.create切断原型链<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;Object.create(proto);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;处理循环引用<br>&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;index&nbsp;=&nbsp;parents.indexOf(parent);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(index&nbsp;!=&nbsp;-1)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果父数组存在本对象,说明之前已经被引用过,直接返回此对象<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;children;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;parents.push(parent);<br>&nbsp;&nbsp;&nbsp;&nbsp;children.push(child);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;in&nbsp;parent)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;递归<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;_clone(parent);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;child;<br>&nbsp;&nbsp;};<br>&nbsp;&nbsp;return&nbsp;_clone(parent);<br>};<br></code></pre>
<blockquote data-tool="mdnice编辑器">
<p>此方法存在一定局限性:一些特殊情况没有处理: 例如Buffer对象、Promise、Set、Map。</p>
</blockquote>
<p data-tool="mdnice编辑器"><strong>如果确实想要完备的深拷贝,推荐使用 lodash 中的 cloneDeep 方法。</strong></p>
<h2 data-tool="mdnice编辑器">19、模糊搜索</h2>
<p data-tool="mdnice编辑器"><strong>参数:</strong></p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>list 原数组</li>
<li>keyWord 查询的关键词</li>
<li>attribute 数组需要检索属性</li>
</ul>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;fuzzyQuery&nbsp;=&nbsp;(list,&nbsp;keyWord,&nbsp;attribute&nbsp;=&nbsp;'name')&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;const&nbsp;reg&nbsp;=&nbsp;new&nbsp;RegExp(keyWord)<br>&nbsp;&nbsp;const&nbsp;arr&nbsp;=&nbsp;[]<br>&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;list.length;&nbsp;i++)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(reg.test(list))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr.push(list)<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return&nbsp;arr<br>}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<pre data-tool="mdnice编辑器"><code>const&nbsp;list&nbsp;=&nbsp;[<br>&nbsp;&nbsp;{&nbsp;id:&nbsp;1,&nbsp;name:&nbsp;'树哥'&nbsp;},<br>&nbsp;&nbsp;{&nbsp;id:&nbsp;2,&nbsp;name:&nbsp;'黄老爷'&nbsp;},<br>&nbsp;&nbsp;{&nbsp;id:&nbsp;3,&nbsp;name:&nbsp;'张麻子'&nbsp;},<br>&nbsp;&nbsp;{&nbsp;id:&nbsp;4,&nbsp;name:&nbsp;'汤师爷'&nbsp;},<br>&nbsp;&nbsp;{&nbsp;id:&nbsp;5,&nbsp;name:&nbsp;'胡万'&nbsp;},<br>&nbsp;&nbsp;{&nbsp;id:&nbsp;6,&nbsp;name:&nbsp;'花姐'&nbsp;},<br>&nbsp;&nbsp;{&nbsp;id:&nbsp;7,&nbsp;name:&nbsp;'小梅'&nbsp;}<br>]<br>fuzzyQuery(list,&nbsp;'树',&nbsp;'name')&nbsp;//&nbsp;[{id:&nbsp;1,&nbsp;name:&nbsp;'树哥'}]<br></code></pre>
<h2 data-tool="mdnice编辑器">20、遍历树节点</h2>
<pre data-tool="mdnice编辑器"><code>export&nbsp;const&nbsp;foreachTree&nbsp;=&nbsp;(data,&nbsp;callback,&nbsp;childrenName&nbsp;=&nbsp;'children')&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;data.length;&nbsp;i++)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;callback(data)<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(data&nbsp;&amp;&amp;&nbsp;data.length&nbsp;&gt;&nbsp;0)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreachTree(data,&nbsp;callback,&nbsp;childrenName)<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>}<br></code></pre>
<p data-tool="mdnice编辑器"><strong>示例:</strong></p>
<p data-tool="mdnice编辑器">假设我们要从树状结构数据中查找 id 为 9 的节点</p>
<pre data-tool="mdnice编辑器"><code>const&nbsp;treeData&nbsp;=&nbsp;[{<br>&nbsp;&nbsp;id:&nbsp;1,<br>&nbsp;&nbsp;label:&nbsp;'一级&nbsp;1',<br>&nbsp;&nbsp;children:&nbsp;[{<br>&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;4,<br>&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'二级&nbsp;1-1',<br>&nbsp;&nbsp;&nbsp;&nbsp;children:&nbsp;[{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;9,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'三级&nbsp;1-1-1'<br>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;10,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'三级&nbsp;1-1-2'<br>&nbsp;&nbsp;&nbsp;&nbsp;}]<br>&nbsp;&nbsp;}]<br>&nbsp;},&nbsp;{<br>&nbsp;&nbsp;id:&nbsp;2,<br>&nbsp;&nbsp;label:&nbsp;'一级&nbsp;2',<br>&nbsp;&nbsp;children:&nbsp;[{<br>&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;5,<br>&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'二级&nbsp;2-1'<br>&nbsp;&nbsp;},&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;6,<br>&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'二级&nbsp;2-2'<br>&nbsp;&nbsp;}]<br>&nbsp;&nbsp;},&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;3,<br>&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'一级&nbsp;3',<br>&nbsp;&nbsp;&nbsp;&nbsp;children:&nbsp;[{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;7,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'二级&nbsp;3-1'<br>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;8,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label:&nbsp;'二级&nbsp;3-2'<br>&nbsp;&nbsp;&nbsp;&nbsp;}]<br>}],<br><br>let&nbsp;result<br>foreachTree(data,&nbsp;(item)&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;if&nbsp;(item.id&nbsp;===&nbsp;9)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;item<br>&nbsp;&nbsp;}<br>})<br>console.log('result',&nbsp;result)&nbsp;&nbsp;//&nbsp;{id:&nbsp;9,label:&nbsp;"三级&nbsp;1-1-1"}&nbsp;&nbsp;&nbsp;<br></code></pre>
<p data-tool="mdnice编辑器">&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:喆星高照,转载请注明原文链接:https://www.cnblogs.com/houxianzhou/p/16669842.html</p><br><br>
来源:https://www.cnblogs.com/houxianzhou/p/16669842.html
頁: [1]
查看完整版本: 常用的工具函数助力JavaScript高效开发