1.Object類型
1)創(chuàng)建Object實例的方式:
- 使用字面量創(chuàng)建
let myinstance={name:'abc',age:20}
- 使用Object創(chuàng)建
let myinstance2=new Object({name:'abc',age:21})
- 使用構(gòu)造函數(shù)創(chuàng)建
function Person(name,age)
{
this.name=name;
this.age=age;
}
let p=new Person('abc','20');
- 使用Object.create創(chuàng)建
let o={name:'abc',age:'20'};
let o2=Object.create(o);
2.Array類型
和其他語言相同點:都是有序列表
不同點:可以保存不同的類型
ES數(shù)組大小可以動態(tài)調(diào)整。
- 創(chuàng)建數(shù)組
var colors=new Array();
//傳入數(shù)字但汞,會構(gòu)建大小為20的數(shù)組
var colors=new Array(20);
//直接傳遞要包含的項
var colors=new Array(“red”,"blue","green");
可以省略new
var colors=Array();
var colors=Array(20);
var colors=Array(“red”,"blue","green");
使用數(shù)組字面量表示法:
var colors=["red","blue","green"];
//創(chuàng)建一個空數(shù)組
var name=[];
- 讀取數(shù)組值
alert(colors[0])毫蚓;
colors[2] = "black"; -
利用length屬性可以刪除元素和添加元素
length屬性設(shè)置為2,會移除最后一項
length值大于數(shù)組項的值檐涝,為定義的對應索引項為undefined
中間位置3到位置98都是不存在的帅刊,所以都是undefined
1)檢測數(shù)組
- 方法一:
if(value instanceof Array){
}
instanceof操作符的問題在于走芋,它假定單一的全局執(zhí)行環(huán)境。
如果網(wǎng)頁中包含多個框架叉寂,就會存在兩個以上不同全局執(zhí)行環(huán)境萍启。 - 方法二:
if(Array.isArray(value)){
}
這個方法解決了上述問題,能夠確定某個值到底是不是數(shù)組,而不管它是在哪個全局執(zhí)行環(huán)境中創(chuàng)建的
2)轉(zhuǎn)換方法
toString(),toLocaleString(),valueOf()方法,join()方法
let arr=[[1,2],[2,3],[3,4]];
console.log(arr.toString());//轉(zhuǎn)換成1勘纯,2局服,2,3驳遵,3淫奔,4
console.log(arr.valueOf()); //轉(zhuǎn)出來還是數(shù)組
console.log(arr.join('||'));//1,2||2,3||3,4
3)push(),pop(),shift(),unshift()
/*棧方法*/
let arr5=[1,2,3];
arr5.push(4);
console.log(arr5);//[1,2,3,4]
arr5.pop();
console.log(arr5);//[1,2,3]
arr5.unshift(0);
console.log(arr5);//[0,1,2,3]
arr5.shift();
console.log(arr5);//[1,2,3]
4)重排序方法
reverse()和sort()
/*逆序*/
let arr5=[1,2,3];
arr5.reverse();
console.log(arr5);//[3,2,1]
sort()方法會調(diào)用每個數(shù)組項的toString()方法,即使數(shù)組中每一項都是數(shù)值堤结,它比較的都是字符串唆迁。
sort方法為了解決如上問題,它能夠接收一個比較函數(shù)作為參數(shù)竞穷。
/*sort排序*/
let arr3=[1,3,2,5,4];
let sortArr=arr3.sort((a,b)=>{
//從小到大
return a-b;
//從大到小
//return b-a;
});
console.log(sortArr);
5)操作方法
- concat()方法
沒有傳遞參數(shù)唐责,就會復制當前數(shù)組并返回給副本。
如果傳遞給concat()方法的是一個或多個數(shù)組瘾带,則該方法會將這些數(shù)組中每一項添加到結(jié)果數(shù)組中鼠哥。
如果傳遞的值不是數(shù)組,這些值會被簡單的添加到結(jié)果數(shù)組的末尾看政。
/*數(shù)組操作的方法*/
let arr6=arr5.concat();//[3,2,1]
console.log(arr6);
arr6=arr5.concat([1,2,3]);//[3,2,1,1,2,3]
console.log(arr6);
- slice()方法
能夠接收一個或兩個參數(shù)朴恳,截取數(shù)組。slice()方法不會影響原始數(shù)組帽衙。包括左邊不包括右邊
arr6=arr5.slice(0,1);//arr5=[3,2,1]
console.log(arr6);//[3]
-
splice方法
刪除:splice(0,2)指定兩個參數(shù)菜皂,起始位置和要刪除的項數(shù)。
插入替換:splice(2厉萝,0恍飘,“red”,“green”)谴垫,指定3個參數(shù)章母,起始位置、要刪除的項數(shù)翩剪、要插入的項耸序。會從當前數(shù)組的位置2插入字符串。
splice()方法始終都會返回一個數(shù)組毒坛,該數(shù)組中包含了從原始數(shù)組中刪除的項修肠。
7)位置方法
-
indexOf(),lastIndexOf()
兩個參數(shù):要查找的項恕出,查找的起始索引位置(可選)
indexOf()從位置0或者索引參數(shù)開始向后查找询枚。
lastIndexOf()從數(shù)組的末尾開始向前查找。
8)迭代方法
- foreach
/*數(shù)組遍歷*/
let arr=['a','b','c'];
arr.forEach((item,index)=>{
console.log(index,item);
})
- every
/*判斷所有元素都符合條件*/
let arr2=[1,2,3];
let result=arr2.every((item,index)=>{
if(item<4)
return true;
});
console.log(result);
- some
let arr2=[1,2,3];
/*只要有一個元素滿足條件*/
let result2=arr2.some((item,index)=>{
if(item<2)
return true;
});
console.log(result2);
- sort
/*sort排序*/
let arr3=[1,3,2,5,4];
let sortArr=arr3.sort((a,b)=>{
//從小到大
return a-b;
//從大到小
//return b-a;
});
console.log(sortArr);
- map
let arr2=[1,2,3]; /*map對元素重新組合*/
let maparr=arr2.map((item,index)=>{
return "<b>"+item+"<b>"
});
console.log(maparr);
- filter過濾
let arr3=[1,3,2,5,4]; /*filter過濾*/
let filarr=arr3.filter((item,index)=>{
if(item>=3)
return true;
});
console.log(filarr);
9)縮小方法
四個參數(shù):前一項值浙巫,當前值金蜀,索引刷后,數(shù)組
-
reduce()從數(shù)組的第一項開始,遍歷到最后
第一次:prev=1渊抄,cur=2
第二次:prev=3(1+2)尝胆,cur=3
... -
reduceRight()從數(shù)組的最后一項開始,遍歷到第一項
3.Date類型
var now=new Date();//不傳參數(shù)會自動獲取當前時間
根據(jù)特定的時間獲取Date變量
var someDate=new Date(Date.parse("May 25,2004 "));
var someDate=new Date("May 25,2004 ");//傳遞字符串會默認調(diào)用Date.parse().
//2005年5月5日下午17點55分55秒
var someDate=new Date(Date.UTC(2005,4,5,17,55,55))
ES5添加了Date.now()方法
4.RegExp類型(來支持正則表達式)
flags包括3個標志:
g:全局模式
i:不區(qū)分大小寫
m:多行模式
//匹配字符串中所有bat或cat
var pattern1=/[bc]at/i;
var pattern1=new RegExp("[bc]at","i");
1)RegExp實例方法
-
exec();
接收一個參數(shù)护桦,要應用模式的字符串含衔,然后返回包含第一個匹配信息的數(shù)組。還包含兩個額外的屬性:index嘶炭,input抱慌。
對于exec()方法而言,每次只會返回一個匹配項眨猎。在沒有設(shè)置全局變量的情況下抑进,在同一個字符串上多次調(diào)用exec()將始終返回第一個匹配項。在設(shè)置全局變量的情況下睡陪,每次調(diào)用exec()方法則會在字符串中繼續(xù)查找新的匹配項寺渗。
-
test()方法
接收一個字符串參數(shù),在模式與該參數(shù)匹配的情況下返回true兰迫;否則返回false信殊。
3)正則表達式
- 【abc】:方括號表示查找任何在方括號內(nèi)的字符
【0-9】查找任何從0至9的數(shù)字
【a-z】查找從小寫a到小寫z的字符
【A-Z】查找從大寫A到大寫Z的字符
【^abc】查找任何不在方括號內(nèi)的字符
|:表示或
.匹配代表任意字符 /h.t/
-
\w查找字符(字母、數(shù)字汁果、下劃線)
\W查找非字符
\d查找數(shù)字
\D查找非數(shù)字字符
\s查找空白字符
\S查找非空白字符
\b匹配單詞邊界
\B匹配非單詞邊界
-
p* 模式p的0或多次出現(xiàn)
p+ 模式p的1或多次出現(xiàn)
p? 模式p的0或1次出現(xiàn)
-
p{n} 模式p正好n次出現(xiàn)
p{n涡拘,}模式p至少n次出現(xiàn)
p{n,m}模式p出現(xiàn)次數(shù)位于n和m間(不包括m)
正則表達式網(wǎng)站:
www.w3cfuns.com
5.Function類型
ES中每個函數(shù)都是Function類型的實例,而且與其他引用類型一樣具有屬性和方法据德。函數(shù)名實際上是一個指向函數(shù)對象的指針鳄乏。
函數(shù)名僅僅是指向函數(shù)的指針:
1)沒有重載
2)函數(shù)聲明與函數(shù)表達式
在代碼開始執(zhí)行之前,解釋器通過一個名為函數(shù)聲明提升的過程棘利,讀取并將函數(shù)聲明添加到執(zhí)行環(huán)境中橱野。
函數(shù)表達式,則必須等到解釋器執(zhí)行到它所在的代碼行才會被解釋執(zhí)行善玫。
3)作為值的函數(shù)
因為函數(shù)名本身就是變量水援,所以函數(shù)也可以作為值來使用。也就是說可以像傳遞參數(shù)一樣把一個函數(shù)傳遞給另一個函數(shù)茅郎,也可以將一個函數(shù)作為另一個函數(shù)的返回值蜗元。
4)函數(shù)的內(nèi)部屬性
在函數(shù)內(nèi)部有兩個特殊的對象:
-
arguments
它是一個類數(shù)組對象,包含傳入函數(shù)中的所有參數(shù)系冗。
雖然arguments的主要用途是保存函數(shù)參數(shù)奕扣,但這個對象還有一個名叫callee的屬性,該屬性是一個指針毕谴,指向擁有這個arguments對象的函數(shù)成畦。
-
this,表示當前執(zhí)行的環(huán)境對象(當在全局作用域中調(diào)用函數(shù)時涝开,this對象的引用就是window)
-
caller
以上函數(shù)回顯示調(diào)用inner函數(shù)(也就是outer()函數(shù))的源代碼
注意:當函數(shù)在嚴格模式下循帐,訪問arguments.callee會導致錯誤。
也不能為函數(shù)的caller屬性賦值舀武。
5)函數(shù)的屬性和方法
每個函數(shù)包括兩個屬性:length和prototype
length:表示函數(shù)希望接收的命令參數(shù)的個數(shù)拄养。
- prototype屬性:保存所有引用類型的實例方法(具體下一章介紹)
重要
每個函數(shù)包含兩個非繼承方法apply()和call()。這兩個方法的用途都是在特定的作用域中調(diào)用函數(shù)银舱。
-
apply()方法接收兩個參數(shù):一個是運行函數(shù)的作用域瘪匿,一個是參數(shù)數(shù)組
-
call()方法與apply()方法作用相同,區(qū)別僅在于接收參數(shù)的方式不同
-
call()方法和apply()方法真正的用武之地是在擴充函數(shù)作用域
-
bind()方法
- call寻馏、apply和bind的區(qū)別
bind返回的是對應的函數(shù)棋弥,用于稍后調(diào)用; call诚欠、apply是立即調(diào)用顽染。
call傳參時,第一個參數(shù)是運行函數(shù)的作用域轰绵,后面的參數(shù)依次列開粉寞。
apply傳參時,第一個參數(shù)是運行函數(shù)的作用域左腔,后面的參數(shù)是數(shù)組唧垦。
- 使用call和apply實現(xiàn)bind
Function.prototype.bind=function(context){
//這里的this其實是當調(diào)用bind方法時的函數(shù)實例
var self=this;
args=Array.prototype.slice.call(arguments);
return function(){
return self.apply(context,args.slice(1));
}
}
6.基本的包裝類型
1)Boolean類型
Boolean類型是與布爾值對應的引用類型。創(chuàng)建Boolean對象:
- 前三行代碼創(chuàng)建了一個Boolean對象falseObject液样,在布爾運算時振亮,所有的對象都會被轉(zhuǎn)換成true,這里是對falseObject而不是對它的值(false)進行求值蓄愁。所以結(jié)果為true
2)Number類型
Number是與數(shù)字值對應的引用類型双炕。
let num=10;
- toString()方法 參數(shù)可以用來表示是幾進制
<script>
let num=100200030040505;
console.log(num.toString());
console.log(num.toString(2));
</script>
- toFixed()方法:將數(shù)值格式化為指定小數(shù)的字符串。
let num=100.005;
console.log(num.toFixed(2));//能夠自動四舍五入100.00
-
toExponential():指數(shù)表示法
3)String類型
let s='abc'撮抓;
let s='abc';
console.log(s.length);//3
方法
- 字符方法:
charAt():根據(jù)索引獲取字符串中的字符
charCodeAt():根據(jù)索引獲取字符串的字符的編碼
ES5中可以使用[ index]來訪問特定字符
let s='abc';
console.log(s.length);//3
console.log(s.charAt(1));//b
- 字符串操作方法(并不會改變原字符串)
concat()方法:拼接字符串
let s1=s.concat('bcd');
console.log(s1);//abcbcd
substr()妇斤、slice()、substring()
當傳入的參數(shù)是負數(shù)的時候丹拯,substr()站超、slice()會從最后往前數(shù),substring會返回0
console.log(s1.substr(-1));//s.length-1
console.log(s1.slice(-1));//s.length-1
console.log(s1.substring(-1));//0
- splite方法(將字符串按照一定條件分割成數(shù)組)
/*字符串轉(zhuǎn)數(shù)組*/
let s1='abcdbd'乖酬;
let arr=s1.split('');
console.log(arr);
- trim()方法:
/*去掉空格*/
let s2=' 你好 ';
console.log(s2.trim());
-
字符串位置方法
indexOf(),lastIndexOf(),返回字符串的索引
字符串的模式匹配方法
match()
let matches=text.match(/.at/);
console.log(matches.index);//返回索引 0
console.log(matches[0]);//返回第一個元素 //cat
search():返回字符串中第一個匹配項的索引死相,沒找到就返回-1
/*返回第一個匹配項的索引*/
let pos=text.search(/at/);//1
console.log(pos);
- replace()方法
如果第一個參數(shù)是字符串,那么只會替換第一個咬像。
如果要替換所有的字符串算撮,需要提供一個正則表達式生宛,并指定全局標志。
/*字符串替換*/
let text='cat,bat,sat,fat';
//只會替換第一個
let result=text.replace('at','ond');
console.log(result);
//要替換所有字符肮柜,需要正則表達式
result=text.replace(/at/g,'ond');
console.log(result);
7.單體內(nèi)置對象
1)Global對象
2)Math對象
-
min()和max()
-
舍入方法
-
random()方法
返回介于0到1之間的一個隨機數(shù)陷舅,不包括0和1