原创 我竟然通過打撲克學會了插入排序?
/** * @desc 插入排序 */ function insertionSort(arr) { // 空手 let res = [] // 摸第一張牌 res.push(arr.shift())
原创 總結Vue插槽三種常用的使用方式
<slot></slot>讓Vue組件具備了插槽的功能 先來看一下最簡單的插槽編寫方式 子組件B ( 擁有插槽功能 ) <template> <slot>這是插槽中的默認內容,即父組件沒往這裏插入內容的話,這裏顯
原创 (轉載)一文讀懂前端緩存
寫的真好 https://zhuanlan.zhihu.com/p/44789005
原创 你會自定義Vue.js中的雙向數據綁定嗎?
第一步: 搭建父子組件結構,子組件使用 v-model,開始自定義 此時頁面輸入框顯示內容: lpj 父組件 <p>{{ name }}</p> <CustomVModel v-model="name"> da
原创 數組拍平的方法
/** * 數組拍平 * [].concat(1, [2, 3], 4) --> [1, 2, 3, 4] * 數組再深就不行了,所以得遞歸 */ function flat(arr) { const i
原创 XSS & CSRF & 預防
常見的web前端攻擊方式有哪些 XSS 跨站請求攻擊 比如發佈一篇嵌入了<script>腳本的的博客 當有人查看這個博客,我就能輕鬆收割訪問者的cookie XSS預防 <script>–> <sc
原创 面試官考你ajax 和 跨域?看這一篇就夠了!
知識點 XMLHttpRequest get 請求 const xhr = new XMLHttpRequest() // true 標誌着請求是異步的 xhr.open('GET', '/api', tr
原创 數組去重 indexOf || Set
function unique(arr) { let res = [] arr.forEach(item => { // 注意 indexOf 也是一種遍歷 if (res.indexOf(item) <
原创 push & pop & unshift & shift
這幾個API注意返回值,且都改變原數組 push let arr = [1, 2, 3] let res = arr.push(4) console.log(res, arr) pop let arr =
原创 又學了一點點linux命令
查看文件開始部分的內容 head [fileName] 查看文件結尾部分的內容 tail [fileName] 搜索文件中的關鍵字 grep [keyWord] [fileName]
原创 前端性能優化的一點思考
加載更快 & 渲染更快 原則: 空間換時間 多使用內存、緩存 減少CPU計算量 減少網絡加載耗時 讓加載更快的方式 壓縮資源體積: 比如代碼壓縮 使用更快的網絡: 比如 CDN 減少訪問次數
原创 你真的懂map方法嗎?
先看一道題吧~ const res = [1, 2, 3].map(parseInt) 執行結果竟然有NaN ? 看下面就明白了 [1, 2, 3].map((item, index) => { pars
原创 將 URL 查詢參數轉化爲js對象的兩種方式
方法一 /** * 將 url 查詢參數解析爲 js 對象 * search: "?name=lpj&age=21" */ function parseURLToObj() { let resObj =
原创 手寫字符串trim方法
/** * 手寫字符串 trim 方法 */ String.prototype.myTrim = function () { return this.replace(/^\s+/, '').replace(/\s
原创 DOM操作性能優化
對DOM查詢做緩存 for (var i = 0; i < oDiv.childNodes.length; i ++) {} var len = oDiv.childNodes.length for (var i