ES6字符串方法:css
//console.log(String.prototype); var str = "abcdefabc"; //console.log(str.includes("a"));//結果true //console.log(str.includes("abf"));//結果false //console.log(str.startsWith("d"));//false //console.log(str.startsWith("abc"));//true //console.log(str.startsWith("d",3));//true console.log(str.endsWith("c"));//true console.log(str.endsWith("abf"));//true console.log(str.endsWith("d", 4));//true console.log("a".repeat(3));//將字符重複n次 console.log("abc".repeat(3));//將字符重複n次 //includes 查看是否包含某個字符或字符串 //startsWith 查看是否以某個字符或字符串開頭 默認是索引0開始查找 第二個參數表示設置查找的位置, //endsWith 查看是否以某個字符或字符串結尾 默認查找到最後 第二個參數表示設置的是查找結果的索引(不包含索引這一項) //repeat() 重複某個字符或字符串 參數指重複的次數
JS數據類型:(編程時的原材料,得用的很是熟)
JS是弱類型的語言,它的數據類型是由值決定的。
var 變量名 = 值
- 基本數據類型:number,string,boolean,null,undefined
- 引用數據類型:對象(object,array,regExp,Date,Math)和函數(function)html
### number類型的數據
- 定義:小數,整數(正整數,負整數,0),NaN(not a number)
- 四則運算(+-*/%)失敗時
- 將其餘數據類型強制轉換number類型失敗時 Number() parseInt() parseFloat()
Number()
true->1 false->0
null ->0;
undefined->NaN
""->0
其餘字符串,只要有一個字符(不包括小數點)不是數字,則轉換結果是NaN
Number("10.5")->10.5 Number("10.5a")->10.5
parseInt() 將字符串中整數部分提取出來,若第一個字符不是數字,則結果是NaN
parseFloat 將字符串中整數和小數部分都提取出來,若第一個字符不是數字,則結果是NaN
運算符優先級:
算術運算符(+-*/%)>比較運算符(>= <= == !=)>邏輯運算符(邏輯與&& 邏輯或||)>賦值運算符(=)
### 字符串類型
字符串經常使用方法
charAt() 參數:索引 經過索引找到對應的字符
charCodeAt() 參數:索引 經過索引找到對應字符的ASCII碼值
indexOf() 參數:字符 1.查找字符中是否有這個字符,若找不到則返回-1
2.找到,則返回對應字符的索引
lastIndexOf()
substr(n,m) 從索引n截取m個
substring(n,m) 從索引n截取到索引m(包前不包後)
slice(n,m)從索引n截取到索引m (包前不包後) 能夠設置負數索引 = 負數索引+length 倒數第幾個
toUpperCase() 轉換成大寫
toLowerCase() 轉換成小寫
split(":") 按照指定的字符,將數組拆分紅數組的每一項
split("") var str = "abc" str.split("") ->["a","b","c"]
split() 將字符串完整的放入數組中 str.split()->["abc"];
split() 參數也能夠是正則
replace() 匹配和替換字符
match() 參數:字符串或正則 將匹配的字符串在數組中輸出
search() 參數:字符串或正則
trim() 去掉字符串的收尾空格 若想全部瀏覽器都支持 寫個正則匹配收尾空格
es6的字符串方法
includes 查看是否包含某個字符或字符串
startsWith 查看是否以某個字符或字符串開頭 默認是索引0開始查找 第二個參數表示設置查找的位置,
endsWith 查看是否以某個字符或字符串結尾 默認查找到最後 第二個參數表示設置的是查找結果的索引(不包含索引這一項)
repeat() 重複某個字符或字符串 參數指重複的次數jquery
### boolean
將其餘數據類型轉換成布爾類型
Boolean() 0,null,NaN,undefined,""->false 其餘所有爲true
!"a"->!後面的轉換成布爾類型,而後再取反
!!"a"->爲了轉換成布爾類型es6
### null undefined
null 如今沒有值但之後會有值 本來應該有值,但沒有值
undefined 歷來沒有存在過ajax
### object類型
- 須要從多方面描述事物,對象是多種數據類型的複合載體
- 增刪改查 遍歷
- 操做時都能以[]或.方式操做
- 若屬性名數字只能以[]方式操做
es6提供的方法
Object.is() 查看對象是否相等(檢測是不是指向的同一個引用地址)
Object.is({},{}) false編程
Object.assign() 合併對象
var obj1 = {name:"lily"};
var obj2 = {age:10};
Object.assign(obj1,obj2);
Object.assign({},obj1,obj2);
Object.assign({},obj1);//拷貝對象
Object.assign(obj1) //仍是表示obj1,沒有意義
{...obj1,...obj2} 合併對象數組
### 數組
es5方法(包含迭代方法)
原有數組改變
push() 往數組的末尾添加內容 返回值: 添加內容後的長度
pop() 刪除數組的最後一項 返回值:刪除的內容
shift() 刪除數組的第一項 返回值:添加內容後的長度
unshift() 往數組的開始位置添加內容 返回值: 添加內容後的長度
splice(n,m,x) 從索引n開始刪除m個,用x的內容替換刪除的內容 返回值:把刪除的內容放在新數組中返回,若沒有刪除的內容返回值是空數組
reverse() 反向排列
sort(function(a,b){ 排序,不傳參表示按ASCII碼值進行排序,若傳參則按照自定義規則排序
return a-b/b-a
return a.localCompare(b)/b.localCompare(a);
))
原有數組沒有改變
join("&") 按照指定的字符將數組拼接成字符串
toSting() 將數組轉換成字符
concat() 合併數組
indexOf() 查找數組中是否有這一項 若沒有則返回-1,如有則返回數組這一項的索引
lastIndexOf()
slice(n,m) 截取數組 從索引n截取到索引m(包前不包後)瀏覽器
迭代方法
forEach() 遍歷數組沒有返回值
map() 遍歷數組並能修改數組的內容有返回值
some() 數組中只要有一個成立,則結果true,只有都不成立才爲false
[1,2,3].some(function(item){
return item>1
})
every 都成立才返回true,只要有一個不成立則返回false
[1,2,3].every(function(item){
return item>1
})
reduce() 從左往右求數組的累計的值
reduceRight 從右每每求數組的累計的值app
es6方法
find() 返回知足條件這一項,找到了則方法停止運行
[1,2,3].find(function(item){
return item>1
})
findIndex() 返回知足條件這一項的索引,找到了則方法停止運行
[1,2,3].findIndex(function(item){
return item>1
})ide
Array.from() 將類數組轉換成數組
Array.of() 將參數(一個數或一組數)轉換成數組
copyWithin(target,start,end) 拷貝數組的部份內容覆蓋到指定的位置(會覆蓋原來的內容)
target:指拷貝內容放置的起始索引
start :獲取內容的起始位置索引
end:獲取內容的結束位置索引
遍歷數組
for(let value of ary){}
for(let key of ary.keys()){}
for(let ele of ary.entries()){}
### 函數
函數定義:
1.開闢一個堆內存,假設引用地址是FFF000;
2.將函數體的內容以字符串的形式存在堆內存裏
3.將引用地址賦值給函數名,函數名就表明了整個函數
函數執行:
1. 開闢一個私有的做用域
2. 形參賦值
3. 變量提高(對var關鍵字和function關鍵字進行聲明和定義 es6沒有變量提高)
4. 代碼從上往下執行
return(返回值):
1.函數遇到return無條件停止運行
2.return可寫可不寫,根據需求來
3.若沒寫return 或return後沒有值,則函數的返回值是undefined
4.return 後面的不預解釋,可是return下面的仍是要預解釋
### 私有做用域 - 變量的查找
私有變量:形參,帶var關鍵字
函數內部不帶var關鍵字查找變量的順序:
var num = 10;
function fn(){
console.log(num);
}
fn();
- 先看是不是私有的,如果私有的則與外界無關
- 若不是私有的,則往上級做用域查找,若沒找到繼續往上級查找,直到找到window,若還沒找到則報錯
上級做用域跟函數定義有關,跟函數執行無關
### this
1. 看函數運行時,前面有沒有點,點前面是誰,this就是誰,若沒有則this是window
2. 自執行函數中的this是window
3. 事件綁定函數中的this是綁定的元素
4. 定時器中this是window
5. 構造函數中的this是實例
6. 箭頭函數中沒有this,this須要往上級做用域中查找
### 原型
- 全部的函數都有個屬性叫prototype,指向於原型對象
- 默認的原型上有個屬性叫constructor,指向所屬的類
- 全部的對象上都有個屬性叫__proto__,它指向於所屬類的原型
繼承:
call繼承:父類的私有屬性
原型繼承:父類的公有的屬性 父類私有屬性會污染子類的原型
寄生式組合繼承:解決了原型繼承的問題
### 回調函數
定義:將一個函數的定義做爲參數傳給另外一個函數時,這個函數就稱爲回調函數
- 回調函數的執行次數
- 回調函數的參數
- 回調函數有沒有返回值
- 回調函數裏的this關鍵字
封裝map,bind方法封裝 敲熟
### 迴流和重繪
### DOM映射
###js盒子模型
- 13個js盒子模型相關屬性
其中11個只能取讀,只有scrollLeft和scrollTop既能夠獲取能夠設置
- 獲取任意的css屬性(無論是行內,內嵌,外鏈)
window.getComputedStyle(ele,null)[attr]
ele.currentStyle[attr]
掌握封裝getCss,setCss,setGroup,css 敲熟
- 瀏覽器兼容性處理方案
- 1.try...catch... 捕獲瀏覽器異常
- 2.屬性判斷的方式
window.getComputedStyle
"getComputedStyle" in window
- 3.檢測數據類型的方式
typeof "getComputedStyle" == "function"
ary instanceOf Array
Object.prototype.toString.call([])=="[object Array]"
- 4.constructor
> 原型對象若被重寫,則constructor有可能不許
- 5.檢測瀏覽器的方式
navigator.userAgent.indexOf("MSIE 8.0")
/MSIE [6-8]\.0/.test(navigator.userAgent)
### 正則
- 掌握經常使用的元字符
\d \w \s \b \n .
\D \W \S \B
^ $
(a|z) a或z
[a-z]
[^a-z]
[az]
+ 1到屢次
* 0到屢次
? 0次或1次
{n} 匹配n次
{n,}至少匹配n次
{n,m} 至少匹配n次,最多匹配m次
g 全文查找
m 換行查找
i 忽視大小寫
正則 test/exec
字符串 split/replace/match
regExecAll()->把匹配的內容放入數組的返回
1.求出現次數最多的字母和次數(2種)
2.格式化url的queryString部分,把參數放在對象中返回?name=zf&age=9 {name:"zf",age:9}
3.格式化時間,按照模板返回指定格式的時間
### jquery中經常使用的方法
1.核心
2.ajax
3.效果
4.屬性
5.文檔處理
6.篩選
7.CSS
8.事件 on off
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> </html> <script> var num = 3; var obj = { num:5, fn : (function(){ this.num*=2; var num = 4; return function(){ this.num *=2; num *= 4; alert(num); } })() }; var fn = obj.fn; alert(num);//6 fn();//16 obj.fn();//64 console.log(window.num,obj.num);//12,10 </script>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> </html> <script> function Father(x,y){ this.x = x; this.y = y; } Father.prototype.fn = function(){console.log("fn")}; function Son(x,y,z){ this.z = z; Father.call(this,x,y);//把父類的私有屬性拷貝到子類的實例上 } //Son.prototype.__proto__ = Father.prototype; 最優的方案 忽視IE //Son.prototype = new Father(); //Son.prototype做爲Father類的實例,這樣Son.prototype原型對象上的__proto__就指向Father類型的原型 Son.prototype = Object.create(Father.prototype);//寄生式組合繼承 最優的 var s = new Son(10,20,30); //console.log(s.fn()); console.log(s); //var f = new Father(10,20); //console.log(f.x);//先在實例上,找到則往所屬類的原型查找,再不到再往父類的原型上查找....一直找到Object類的原型,若還沒找到則返回undefined </script>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> </html> <script> class Father{ constructor(x,y){ this.x = x; this.y = y; } fn(){ console.log("fn"); } static fn2(){ /*靜態方法,是定義在Father類上的方法*/ console.log("fn2") } } class Son extends Father { constructor(x,y,z){ super(x,y);//Father.call(x,y); 子類調用父類私有的屬性 只要寫extends了,super()必須寫 this.z = z; } writeCss(){ console.log("writeCss"); } } //es6繼承 父類的公有屬性,私有屬性,靜態屬性 var s = new Son(10,20,30);//必需要加new運行不能當成普通函數,只能是類 s.fn(); console.log(s.x); </script>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> </html> <script> //柯里化函數的思想 (預處理的思想機制) //bind 改變方法中的this關鍵字,返回一個函數的定義 function fn(a,b,c){ console.log(this); return a+b+c } var res = fn.bind({},10,20); //返回值是一個小函數 console.log(res(30));//返回的小函數運行時纔會讓方法fn運行 //bind方法運行:1.bind的第一個參數保存下來 2.把從第二個參數開始的實參保存下來 3.返回值是一個函數定義 //bind返回值運行 :1.改變fn的this關鍵字 2.把全部的參數傳給fn 3.讓fn執行 Function.prototype.myBind = function(context){ var context = context ||window; var arg1 = [].slice.call(arguments,1); var that = this; return function(){ var arg2 = [].slice.call(arguments); var arg = [].concat(arg1,arg2); //參數合併後的數組 return that.apply(context,arg); } } var res2 = fn.myBind({},10,20); console.log(res2(30)); </script>