js基礎查漏補缺: 1. NaN != NaN; 複製數組可以用slice; 數組的sort、reverse等方法都會改變自身; Map是一組鍵值對的結構,Set是key的集合; Array、Map、Set都屬於iterable類型,可用for...of遍歷; 2. rest參數只能寫在最後,前面用 ...
js基礎查漏補缺:
1. NaN != NaN;
複製數組可以用slice;
數組的sort、reverse等方法都會改變自身;
Map是一組鍵值對的結構,Set是key的集合;
Array、Map、Set都屬於iterable類型,可用for...of遍歷;
2. rest參數只能寫在最後,前面用...標識;
一個函數接收另一個函數作為參數稱之為高階函數,比如map、reduce、filter、sort;
arr.map(String) 將數組元素都變為string類型;
// 數組去重 arr.filter(function(element, index, self) { return self.indexOf(element) === index; }) // 篩選素數 arr.filter(function(num){ var flag = true; if(num < 2){ flag = false; }else{ for(var i=2; i<num; i++){ if(num % i == 0){ flag = false; break; } } } return flag; })
返回閉包時儘量不要引用任何迴圈變數,或者後續會發生變化的變數,如果非要,可以用該函數的參數綁定值自執行;
藉助閉包可以封裝私有變數,攜帶狀態,可以把多參數函數變成單參數;
由於this在箭頭函數中已經按詞法作用域綁定了,所以call和apply調用箭頭函數時無法對this綁定,會忽略;
generator函數可以在執行過程中多次返回,看上去就像可以記住執行狀態的函數,可以用for...of迴圈迴圈generator對象;
3. typeof NaN === 'number' typeof null === 'object'
儘量不要使用new String等去創建包裝對象;
1+null === 1 1+undefined === NaN
123..toString() === '123' 或 (123).toString()
null,undefined沒有toString方法
正則:\d(數字) \w(字母或數字) \s(空格) *(任意個字元) +(至少一個字元) ?(0或1個字元) {n}(n個字元) {n,m}(n到m個字元)
進階正則:[]表示範圍 ^開頭 $結尾 ; / / 或 new RegExp()
切分字元串:‘a,b;; c d’.split(/[\s\,\;]+/)
分組:用()表示要提取的分組,reg.exec(str),返回一個數組,第一個是匹配到的整個字元串,後面的表示匹配成功的子串;失敗返回null
預設貪婪匹配(匹配儘可能多的字元),非貪婪匹配(加上?);
JSON.stringify第二個參數可以傳入一個數組(輸出指定的屬性),也可傳入一個函數(參數為key和value),第三個參數是縮進‘ ’;如果想精確控制序列化,可以給對象定義toJSON方法,直接返回需要的數據;
JSON.parse反序列化;
低版本瀏覽器無__proto__,所以用Object.create();
4. location.assign('') location.reload();
dom樹的根節點是document;
伺服器可以根據cookie來區分用戶,如果在cookie中設置了HTTPOnly屬性,js腳本將無法讀取cookie信息,這樣能有效防止xss攻擊;
不要使用history對象;
children是只讀的,firstElementChild,lastElementChild,innerText,textContent,appendChild,insertBefore(new, target),removeChild,parentElement;
h5控制項:type為date,datetime-local,color,獲取值dom.value;
ajax:XMLHttpRequest對象,低版本ie用ActiveXObject;
5. es6、7大部分新特性的熟練理解和掌握
6. 希望2018年繼續夯實基礎,對每個知識點都有透徹的理解和認識,加油!