對象(引用類型的值)是引用類型的一個實例,新對象是使用new操做符後跟一個構造函數來建立的。構造函數自己就是一個函數,該函數用於建立新對象。ECMAScript提供了不少原生引用類型(Object,Array,Date,RegExp,Funcion…)。javascript
1、Object類型html
一、 建立方式java
① 、使用new操做符後跟Object構造函數正則表達式
Var person=new Object();編程
Person.name=’xxxx’;windows
Person.age=10;數組
② 對象字面量標識法瀏覽器
Var person={數據結構
Name:’xxxx’,app
Age:10
}
屬性默認都是字符串,打不打引號均可以。
二、 使用方式(訪問對象的屬性)
① 、點表示法
Person.name;person.age;
② 、中括號表示法
Person[‘name’];person[‘age’]
方括號中的字符串能夠經過變量傳入
2、Array類型
ECMAScript中的數組相對於其餘語言來說比較特殊,是個功能比較多的數據類型。主要區別在於:每一項均可以保存任何類型的數據,數組的大小是能夠動態調整的。
一、 建立方式
① 、使用Array的構造函數
Var colors = new Array();
Var colors = new Array(「aa」,」bb」,」cc」);
② 、使用數組字面量表示法
Var colors = [「aa」,」bb」,」cc」];
二、 Array用做棧(FILO)
Array類型自帶了兩個方法push(),pop(),若是要實現一個棧的數據結構能夠直接用Array類型定義。
三、 Array用做隊列(FIFO)
Array類型的shift()方法能夠取得數組中第一個元素並移除該元素,結合push()方法,就能夠將一個數組當作隊列來使用
四、 一些經常使用方法(混個眼熟,用到時再去查)
① 、重排序:Reverse()、sort()
② 、鏈接Concat();
③ 建立新數組slice();
④ 插入刪除替換splice();
⑤ 查找索引indexOf()、lastIndexOf();
⑥ 迭代方法:every()、filter()、forEach()、map()、some();
⑦ 縮小方法:reduce()、reduceRight()
3、Date類型
4、RegExp類型
以上兩種類型,低端應用中比較少見,尤爲是正則表達式,博大精深不是一句兩句能明白的,用到再查API吧。
5、Function類型
什麼,函數居然是一種數據類型,沒錯,ECMAScript中函數其實是對象,函數與其餘引用類型同樣能夠具備屬性和方法。每一個函數都是Function類型的實例,函數名其實是一個指向函數對象的指針。這意味着js中定義函數時的函數名單從定義函數的角度講意義不大,由於函數執行的邏輯跟函數名徹底不要緊。函數名既然是一個變量那麼也就意味着它能夠做爲參數傳遞給另外的函數,也能夠做爲函數的返回值返回。
ECMAScript中函數沒有定義返回值類型,由於返回值能夠是任何類型,這是跟變量的定義相符合的,由於一個變量能夠表示任何類型的數據。
Ex1:
Function aa(){};
Var bb=function(){};//與上面效果徹底相同。
Ex2:
function aa () {
alert('aa');
};
var aa = function() {
alert('bb');
}
調用aa()時將會輸出bb
Ex3:
如下兩個button單擊後都輸出了2,童鞋們,亮瞎眼了嗎?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var golbalaaa= 1;
function test() {
var age=1;
alert(age);
}
function test1() {
var age1=2;
alert(age1);
};
test=test1;
</script>
</head>
<body>
<form>
<input type="button" onclick="test()" />
<input type="button" onclick="test1()" />
</form>
</body>
</html>
一、 函數聲明與函數表達式的區別
這裏定義函數聲明就是帶函數名的函數的定義,函數表達式就是不帶函數名的函數定義。
解析器在向執行環境中加載數據時,對函數聲明和函數表達式並不是一視同仁,解析器會率先讀取函數聲明,並使其在執行任何代碼以前可用(能夠訪問),這也就意味着經過函數聲明方式定義的函數能夠先使用後定義;對於函數表達式,則必須等到解析器執行到它所在的代碼行,纔會真正被解釋執行,這也就是說若是經過這種方式定義的函數必須先定義而後才能使用,不然確定會報錯(unexpected identifier)。
二、 函數的內部屬性
① arguments:數組對象,包含着傳入函數中的全部參數
a) 這個對象有一個比較特殊的屬性:callee,是一個指針,指向擁有這個arguments對象的函數。
② This:this引用的是函數的執行環境對象(與這個函數處於同一級別的環境,也就是這個函數的調用者的做用域)
③ Caller:調用當前函數的函數的引用,若是是在全局做用域中調用當前函數,它的值爲null
④ Length:函數的參數的個數
⑤ Prototype:神奇的原型(先混個眼熟吧,這個東西是跟繼承相關)
三、 函數的內部方法
如下兩個方法的用途都是在特定的做用域中調用函數,實際上等於設置函數體內this對象的值。
① apply():接受兩個參數,一個是在其中運行函數的做用域,另外一個是參數數組(能夠是Array實例,也可使arguments對象)
② call():與apply()的區別在於接受參數的方式不一樣,第一個this沒有變化,變化的是其他參數都直接(逐個列出來)傳遞給函數
以上方法真正強大的地方是可以擴充函數賴以運行的做用域,這樣一來對象就能夠不和方法有任何耦合關係,對象須要什麼方法能夠經過這種方式調用。
③ bind()。這個方法會建立一個函數的實例,其this值會被綁定到傳給bind()函數的參數(通常是一個對象)的做用域上。是否是有種依賴注入的味道?
6、基本包裝類型
常見的OO編程語言都有基本類型的包裝類型,目的是爲了更方便處理基本類型數據,由於包裝了以後就能夠增長更多額外的功能。ECMAScript中提供了3個特殊的引用類型:Boolean、Number、String。
Ex1:
Var s1 = ‘xxxxxxxxxxxxxx’;
Var s2 = v1.substring(2);
解釋器其實作了這麼幾個操做:建立一個String類型的實例,在這個String類型的實例上調用substring()方法,銷燬這個實例。
使用new建立的引用類型的對象,在執行流離開當前做用域以前都一直保存在內存中。而自動建立的引用類型的對象,則只存在於一行代碼的執行瞬間,而後當即被銷燬,這意味着咱們不能再運行時爲基本類型值添加屬性和方法。
Boolean類型沒什麼好說的,主要過一下Number類型與String類型的一些常見方法。
一、 Number類型
① toFixed():按照指定的小數位返回數值的字符串表示
② toExponential():返回數值的指數形式表示的字符串
③ toPrecision():
二、 String類型
① 、length屬性,表示包含多少個字符
② 、charAt()、charCodeAt():訪問字符串中特定位置的字符
③ 、concat():字符串拼接
④ 、slice()、substr()、substring()
⑤ 、indexOf、lastIndexOf()
⑥ 、trim()
⑦ 、toLowerCase()、toLocalLowerCase()、toUpperCase()、toLocalUpperCase()
⑧ 、replace()
⑨ 、split()
7、單體內置對象
所謂打你內置對象:有ECMAScript提供的,不依賴與宿主環境的對象。Object,Array,String等都是內置對象,這裏再補充兩個Global、Math。
在大多數的ECMAScript實現中都不能直接訪問Global對象,不過WEB瀏覽器實現了承擔該角色的windows對象。全局變量和函數都是Global對象的屬性。Math對象提供了不少屬性和方法,用於輔助完成負載的數學計算。
本文系我的讀書總結,轉載請注意出處