1.Array
1.1數(shù)組的length屬性
數(shù)組的
length
屬性很有特點(diǎn)——它不是只讀的,因此通過這個屬性,我們可以在數(shù)組的末尾移除項(xiàng)或者添加項(xiàng).
1.2 檢測類型
instanceof
- 語法:
arr instanceof Array // true
但是趣倾,instanceof
存在問題侧馅,加入頁面當(dāng)中有多個框架,那么就會產(chǎn)生多個array暖庄,當(dāng)兩個環(huán)境不一致的時候弊予,檢測就會出錯
Array.isArray()
- 語法:
Array.isArray(value) //true
這個方法是判斷這個值是不是數(shù)組祥楣,而不去管它是在哪個執(zhí)行環(huán)境
1.3 類型轉(zhuǎn)換
toString
、toLocaleString
、valueOf
每個對象身上都有的方法荣堰,在對數(shù)組進(jìn)行類型轉(zhuǎn)換的時候床未,數(shù)組的每一項(xiàng)都會默認(rèn)調(diào)用toString() 這個方法。
1.4 數(shù)組的方法
1.41 棧方法
arr.push()
語法:arr.push(value);
作用: 在數(shù)組的最后插入項(xiàng)振坚,并返回插入項(xiàng)之后數(shù)組的長度薇搁。
arr.pop()
語法:arr.pop();
作用: 將數(shù)組的最后一項(xiàng)刪除,返回被刪除的項(xiàng)渡八。
1.42 隊(duì)列方法
arr.unshift()
語法:arr.unshift(value);
作用: 在數(shù)組的最前面插入項(xiàng),并返回插入項(xiàng)之后數(shù)組的長度.
arr.shift()
語法:arr.shift()
作用: 刪除數(shù)組的第一項(xiàng),并返回被刪除的項(xiàng).
1.43 重排序方法
arr.reverse()
語法:arr.reverse(value);
作用: 逆轉(zhuǎn)數(shù)組.
arr.sort()
語法:arr.sort()
作用: 重排序, 如果不傳比較函數(shù)的話,sort()
會調(diào)用數(shù)組每一項(xiàng)的toString()方法,然后比較得到的字符串,但是,sort()
還是很強(qiáng)大的,里面可以傳入一個比較的函數(shù).
function compare(value1, value2) {
return value1-value2;
}
arr.sort(compare);
1.44 操作方法
arr.concat()
語法:arr.concat(value);
作用: 拷貝一個數(shù)組的副本,但是不改變原數(shù)組,value
的值可以是字符串,也可以是數(shù)組,任何類型都可以.
arr.slice()
語法:arr.slice(起始位置, 結(jié)束位置);
作用: 截取數(shù)組,從起始位置開始,到結(jié)束位置結(jié)束,但是不包含結(jié)束位置.然后返回一個新的數(shù)組,不會改變原數(shù)組.
arr.splice()
語法:arr.splice(起始位置, 操作的項(xiàng)數(shù), 新的項(xiàng));
作用; 拼接數(shù)組,向數(shù)組當(dāng)中插入項(xiàng),有多種用法.
var arr = [1, 2, 3, 4]
arr.splice(0, 1) // 刪除操作,從第一項(xiàng)開始,刪除一項(xiàng),返回刪除的項(xiàng)組成的數(shù)組 [1];
console.log(arr) // [2, 3, 4]
arr.splice(0, 0, 5, 6) //插入操作, 從第一項(xiàng)開始,刪除0項(xiàng),然后在開始的位置加上5, 6兩項(xiàng), 返回的是一個空數(shù)組.
console.log(arr) // [5,6,1,2,3,4]
arr.splice(0,1, 5) //替換操作,從第一項(xiàng)開始,刪除一項(xiàng),然后將5插入, 返回被刪除的項(xiàng)組成的數(shù)組 [1];
console.log(arr) // [5,2,3,4]
1.45 位置方法
arr.indexOf()
語法:arr.indexOf(value)
作用: 查詢數(shù)組當(dāng)中是否有某個值,如果有的話返回索引,如果沒有返回-1;
arr.lastIndexOf()
語法:arr.lastIndexOf(value);
作用: 查詢數(shù)組當(dāng)中是否包含某個值,從右往左的順序,如果有的話返回索引,如果沒有的話返回-1;
1.46 迭代方法
foreach()啃洋、map()、filter()屎鳍、some()宏娄、every()、reduce()逮壁、reduceRight()
這幾個方法已經(jīng)記錄過了孵坚。
2. Data類型
Data類型使用的時間是自1970年1月1日起經(jīng)過的毫秒數(shù).
Data常用方法
- getFullYear(): 返回年份,四位;
- getMonth(): 返回月份, 其中0表示一月,11表示12月,在操作的時候要注意.
- getDate(): 返回日期月份當(dāng)中的天數(shù)(1到31)
- getDay(): 返回日期當(dāng)中的星期幾,其中0代表的是星期日, 6代表星期六;
- getHours(): 返回小時數(shù),從0到23;
- getMinutes(): 返回日期中的分鐘數(shù),從0到59;
- getSeconds(): 返回日期當(dāng)中的秒數(shù),從0到59;
3.Function類型
函數(shù)實(shí)際上是對象,也有屬性和方法,這樣來說的話,函數(shù)是引用類型,函數(shù)名其實(shí)是指向函數(shù)對象的一個指針,不會與函數(shù)方法綁定.
3.1 函數(shù)沒有重載
個人理解:由于函數(shù)名是函數(shù)對象的指針,并不是函數(shù)方法,所以定義相同名字的函數(shù),相當(dāng)于是給變量綁定了一個新的對象.
3.2 函數(shù)聲明和函數(shù)表達(dá)式
函數(shù)聲明有函數(shù)聲明提升,函數(shù)表達(dá)式?jīng)]有,除了這一點(diǎn)兩者沒有任何區(qū)別
3.3 作為值的函數(shù)
由于函數(shù)名本來就是變量名,所以函數(shù)也就相當(dāng)于賦值給變量的值,可以當(dāng)做值來使用. 也就是說,不僅可以像傳遞參數(shù)一樣把一個函數(shù)傳遞給另一個函數(shù),而且可以將一個函數(shù)作為另一個函數(shù)的結(jié)果返回,這就是高級函數(shù)與閉包
<script>
function demo(arg1, arg2) {
return arg1(arg2);
}
function add(num) {
num += 10;
return num;
}
var a = demo(add, 20);
console.log(a); // 30
</script>
3.4 函數(shù)的內(nèi)部屬性
函數(shù)的內(nèi)部有兩個特殊的對象——arguments和this. 其中,arguments就是傳參列表,你變我也變,我變你也要變. 另一個特殊對象this,就是函數(shù)執(zhí)行時的環(huán)境對象的引用,在全局作用域中執(zhí)行,this就指向window
3.5 函數(shù)的屬性和方法
3.51 函數(shù)的屬性
因?yàn)楹瘮?shù)是對象,所以函數(shù)也有屬性和方法,每個函數(shù)都包含兩個屬性——length和prototype。其中窥淆,length表示的是函數(shù)希望接收的實(shí)參的個數(shù)卖宠。prototype屬性,后面原型會深入研究忧饭,它是一個指向原型對象的指針
3.52 函數(shù)的方法
每個函數(shù)都有兩個非繼承而來的方法:apply()和call().這兩個方法的用途都是在特定的作用域當(dāng)中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)this對象的值,(因?yàn)閠his指向的是函數(shù)運(yùn)行時所在的作用域?qū)ο罂肝椋詫⑻囟ǖ淖饔糜驅(qū)ο髠鬟M(jìn)來,就改變了this對象的值)
apply()
語法:fn.apply(context, [arg1, arg2, arg3...])
作用: 改變this
指向,注意傳的參數(shù)要是個數(shù)組;
call()
語法:fn.call(context, arg1, arg2, arg3...)
作用: 改變this指向, 注意傳的參數(shù),是一個一個傳的,而不是數(shù)組.
bind()
語法:fn.bind(context, arg1, arg2....)
作用: 改變this指向, 返回一個新的函數(shù),該函數(shù)的this指向的是context;
<script>
var color = 'red';
var obj = {
color: 'blue'
}
function getColor() {
console.log(this.color);
}
var getNewColor = getColor.bind(obj);
getNewColor() //blue;
getColor() // red;
</script>
4. 基本包裝類型
為了便于操作基本類型,ECMAScript還提供了3個特殊的引用類型:Boolean词裤、Number和String,這些類型與其他的引用類型相似刺洒,但同時又有各自基本類型對應(yīng)的特殊行為。實(shí)際上每當(dāng)讀取一個特殊類型的值的時候吼砂,后臺就會創(chuàng)建一個對應(yīng)的基本的包裝類型的對象逆航,從而讓我們能夠調(diào)用一些方法來操作這些數(shù)據(jù)。
例:
var s1 = 'hello world';
var s2 = s1.substring(2);
摘抄
這個例子中的s1包含一個字符串渔肩,字符串當(dāng)然是基本類型的值因俐。而下一行調(diào)用了s1的substring()方法,并將返回的結(jié)果保存在了s2當(dāng)中赖瞒。 我們知道基本類型不是對象女揭,因而從邏輯上講它們不應(yīng)該有方法才對蚤假。其實(shí)為了讓我們實(shí)現(xiàn)這種直觀的操作栏饮,后臺已經(jīng)自動完成了一系列的處理。當(dāng)?shù)诙写a訪問s1的時候磷仰,訪問過程處于一種讀取模式袍嬉,也就是要從內(nèi)存中讀取這個字符串的值。而在讀取模式中訪問字符串時,后臺都會自動完成下列操作
- 1.創(chuàng)建String類型的一個實(shí)例伺通;
- 2.在實(shí)例上調(diào)用指定的方法箍土;
- 3.銷毀這個實(shí)例;
可以將上面的三步想象成這個代碼:var s1 = new String("hello world");
var s2 = s1.substring(2);
s1 = null;
4.1 String包裝類型
Boolean
類型和Number
類型的包裝類很少用罐监,也沒有什么方法吴藻,不討論,String
類型的包裝類定義了很多的方法弓柱。
1.字符方法
charAt()
語法:str.charAt(index);
作用: 返回索引位置上的單個字符沟堡;
charCodeAt()
語法:str.charCodeAt(index);
作用: 返回索引位置的字符編碼;
2. 字符串操作方法
concat()
語法:str.concat(str2矢空, str3);
作用: 拼接字符串航罗,并返回拼接好的字符串,原字符串不變屁药,但一般不用都用+號粥血;
slice()
語法:str.slice(index1, index2);
作用: 截取字符串,從index1的位置開始酿箭,到index2的位置結(jié)束复亏,但是不包括index2,然后返回截取的字符串七问,對原字符串沒有影響蜓耻。
substring()
語法:str.substring(index1, index2);
作用: 截取字符串,從index1的位置開始械巡,到index2的位置結(jié)束刹淌,但是不包括index2,然后返回截取的字符串讥耗,對原字符串沒有影響有勾。
substr()
語法:str.substr(index1, length);
作用: 截取字符串,并返回截取的字符串古程,從index1的位置開始蔼卡,第二個參數(shù)length代表的是截取的長度,對原字符串沒有影響挣磨。
3.字符串位置方法
indexOf()
語法:str.indexOf(str1);
作用: 從一個字符串中查找給定的字符串有沒有雇逞,如果有返回index索引位置,如果沒有返回-1茁裙,順序是從左往右查找塘砸。
lastIndexOf()
語法:str.lastIndexOf(str1);
作用: 從一個字符串中查找給定的字符串有沒有,如果有返回index索引位置晤锥,如果沒有返回-1掉蔬,順序是從右往左查找廊宪。
4.trim()方法
trim()
語法:str.trim()
作用: 刪除字符串前面和后面的空格;
5.字符串大小寫轉(zhuǎn)換方法
toLowerCase()
語法:str.toLowerCase();
作用: 將字符串轉(zhuǎn)換為小寫女轿;
toUpperCase()
語法:str.toUpperCase();
作用: 將字符串轉(zhuǎn)換為大寫箭启;
5.字符串模式匹配的方法
match()
語法:str.match(正則表達(dá)式或者RegExp對象);
作用: 匹配字符串蛉迹,返回的是一個數(shù)組傅寡。
search()
語法:str.search(正則表達(dá)式或者RegExp對象);
作用: 該方法返回字符串當(dāng)中第一個匹配項(xiàng)的索引,如果沒有找到返回-1北救,始終是從開頭向結(jié)尾查找赏僧;
replace()
語法:str.replace(字符串或正則,字符串或回調(diào)函數(shù))
作用: 替換字符串扭倾。如果第一個參數(shù)是字符串淀零,那么只會替換第一個子字符串。要想替換所有的字符串膛壹,第一個參數(shù)要使用正則匹配驾中。如果第二個參數(shù)是字符串,那么還可以使用一些特殊的字符序列(下圖列出)模聋,將正則表達(dá)式匹配到的值插入到結(jié)果字符串當(dāng)中肩民。第二個參數(shù)也可以是個函數(shù),在只有一個匹配項(xiàng)的情況下链方,會向這個函數(shù)傳遞三個參數(shù):模式的匹配項(xiàng)持痰,模式匹配項(xiàng)在字符串中的位置、原始字符串祟蚀,如果定義的正則表達(dá)式有多個捕獲組的話工窍,那么第二個參數(shù)是第一個捕獲組的匹配項(xiàng),依次類推
兩個參數(shù)都是字符串
<script>
var fruits = 'apple banana orange apple';
var str = fruits.replace('apple', 'orange');
console.log(str); // 'orange banana orange apple'
</script>
第一個參數(shù)是正則前酿,第二個參數(shù)是字符串
<script>
var fruits = 'apple banana orange apple';
var str = fruits.replace(/apple/g, 'orange');
console.log(str);//'orange banana orange orange'
</script>
第一個參數(shù)是正則患雏,第二個參數(shù)是字符串且應(yīng)用字符序列
<script>
var fruits = 'apple banana orange apple';
var str = fruits.replace(/(apple)/g, 'big($1)');
console.log(str); //'big(apple) banana orange big(apple)'
</script>
第一個參數(shù)是正則,第二個參數(shù)是函數(shù)
<script>
var fruits = '2019-03-08 2017-04-12';
var match = /(\d{4})-(\d{2})-(\d{2})/g;
function demo(match, one,two,three) {
return one+'/'+two+'/'+three;
}
var str = fruits.replace(match, demo);
console.log(str); // '2019/03/08 2017/04/12'
</script>
查看replace當(dāng)中的函數(shù)參數(shù)是什么罢维?
var str = '2012-12-11';
function test() {
var arr = [...arguments];
arr.forEach(function(ele,index) {
console.log(ele);
})
}
var match = /(\d{4})-(\d{2})-(\d{2})/g;
str.replace(match, test);
split()
語法:str.split(分割符淹仑,數(shù)組長度);
作用:基于指定的分隔符將一個字符串分割成多個子字符串肺孵,并將這些子字符串放在一個數(shù)組中返回匀借。
5.單體內(nèi)置對象
所謂的單體內(nèi)置對象就是不必顯示的實(shí)例化對象傻昙,因?yàn)镋CMAScript已經(jīng)給實(shí)例化好了焕刮,ECMA-262 定義了兩個內(nèi)置對象——Global和Math始绍。
5.1 Global對象
在web瀏覽器當(dāng)中的Global對象都是作為
Window
對象的一部分來實(shí)現(xiàn)的先馆,可以理解為Global
就是Window
,所有定義在全局的屬性和方法都會添加到Window對象的身上殖蚕。
5.2 Math對象
Math對象的屬性
Math對象的常用方法
Math.min()
語法:var num = Math.min(1,2,3);
作用: 返回一組數(shù)中的最小值骏啰;
Math.max()
語法:var max = Math.max(1,2,3);
作用: 返回一組數(shù)中的最大值片迅;
Math.ceil()
語法:Math.ceil(4.5) // 5
作用: 向上取整磅叛;
Math.floor()
語法:Math.floor(4.5) // 4
作用: 向下取整屑咳;
Math.round()
語法:Math.round(4.5) // 5
作用: 四舍五入;
Math.random()
語法:Math.random();
作用: 返回一個0到1之間的隨機(jī)數(shù)弊琴;