原创 我竟然通過打撲克學會了插入排序?

/** * @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>–> &lt;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