JavaScript高程學習筆記之引用類型(5)


[TOC]javascript


1.object類型

建立object實例有兩種 第一種:new操做符後跟Object構造函數var person = new Object(); 第二種:對象字面量前端

var person = {
		name = "yohann";
		age = 22;
	};

使用對象字面量語法,屬性名也能夠用字符串 開發人員更青睞對象字面量語法java

alert(person["name"]);
alert(person.name);

方括號語法的優勢能夠經過變量名來訪問屬性 若是屬性包含致使語法錯誤的字符,或者屬性名是關鍵字保留字,可使用方括號法 一般,除非必須使用變量來訪問屬性,建議使用點表示法正則表達式

2.Array類型

  • 每一項均可以保存任何類型的數據
  • 數組的大小是動態調整的 建立數組的兩種方法 第一種:使用Array構造函數var colors = new Array(); 第二種:使用數組字面量var colors = ["red", "blue", "green"]; 數組length屬性不是隻讀的,能夠對其讀寫
2.1 檢測數組

肯定某個對象是否爲數組,能夠用Array.isArray()方法,不用管是哪一個全局環境中建立的 兼容IE9+,Firefox4+,Safari 5+,Opera 10.5+,Chromeexpress

2.2 轉換方法

數組的toString方法會返回有數組中每一個值字符串拼接而成的以一個逗號分開的字符串 valueOf方法,toLocaleString方法 調用數組的toLocaleString方法會建立一個以逗號分開的字符串 使用join()方法,可使用不一樣的分隔符來構建這個字符串數組

2.3 棧方法

ECMAScript爲數組提供push()方法和pop()方法,實現相似棧的行爲 push()方法接收任意數量的形參,逐個添加到數組末尾,並返回修改後的長度 pop()方法從數組移出最後一項,減小數組length值,而後返回移出的項瀏覽器

2.4 隊列方法

隊列的訪問規則是先進先出 shift()方法,移除數組的第一個項並返回該項,同時數組長度減一。 unshift()方法,在數組前端添加任意個項,並返回數組的長度 用unshift方法和pop方法能夠相反的模擬隊列app

2.5 重排序方法

數組中存在兩個直接用來重排序的方法:reverse()和sort() reverse()方法:反轉數組項的順序 sort()方法能夠接收一個比較函數做爲參數值,以便咱們指定哪一個值在哪一個值前面 比較函數經過返回一個小於零,等於零或大於零的值來影響排序結果dom

2.6 操做方法

concat()方法:基於當前數組中的全部項,建立一個數組。傳遞給該方法是一個或多個數組,則將每一項添加到結果數組中 slice()方法: 基於當前數組中的一個或多個項建立數組。接收一個或者兩個參數。一個參數返回從這個參數開始到數組末尾的數組。兩個參數返回起始和結束位置的項,但不包含結束位置項 splice()方法:向數組中部插入項函數

  • 刪除:能夠刪除任意數量的項,指定兩個參數,刪除第一項的位置和要刪除的項數
  • 插入:指定位置插入任意數量的項。提供三個參數,起始位置,0(要刪除的項數)和要插入的項
  • 替換:指定位置插入任意數量的項。提供三個參數,起始位置,要刪除的項數和要插入任意數量的項數
2.7 位置方法

indexOf方法和lastIndexOf方法 兩個方法都接收兩個參數:要查找的項和表示查找起點位置的索引 前者從數組的開頭位置(0)開始向後查找,後者從數組的末尾開始向前查找 要查找的項必須嚴格相等

2.8 迭代方法
  • every(): 對數組中的每一項運行給定函數,若是函數對每一項都返回true,則返回true
  • filter(): 對數組的每一項運行給定函數,返回給函數會返回true的項組成的數組
  • forEach(): 對數組中的每一項運行給定函數,沒有返回值
  • map(): 對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組
  • some(): 對數組中的每一項運行給定函數,若是函數對任一項返回true,則返true
2.9 歸併方法

reduce()和reduceRight()。迭代數組的全部項,構建一個最終的返回值。 reduce()方法從數組的第一項開始,reduceRight()則從數組的最後一項開始 接收兩個參數:一個在每一項調用的函和(可選的)做爲歸併基礎的初始值 傳遞的函數接收四個參數:前一個值,當前值,項的索引和數組對象 例如用此方法執行求數組中全部值之和操做

3.Data類型

建立日期對象,使用new操做符和Data構造函數便可 不傳遞參數,自動得到當前的日期和時間。 若根據特定的日期和時間建立時間,必須傳入表示該日期的毫秒數 簡化這一計算過程提供了兩個方法:Data.parse()Data.UTC() 前者接收一個表示日期的字符串參數,根據這個字符串參數返回相應日期的毫秒數 Data.parse()日期格式:

  • 「月/日/年」,如6/13/2014
  • 「英文月名 日,年」,如January 12,2014
  • 「英文星期幾 英文月名 日 年 時:分:秒 時區」,如Tue May 25 2004 00:00:00 GMT-0700.
  • ISO 8601擴展格式 Data.UTC()方法一樣返回日期的毫秒數,不一樣的是 Data.UTC()的參數分別是年份,基於0的月份(一月是0,二月是1),月中的那一天(1到31),小時數(0到23),分鐘,秒以及毫秒數 例:var allFIves = new Data(Data.UTC(2005, 4, 5, 17, 55, 55)); Data構造函數會模仿Data.UTC(),有一點明顯不一樣,日期和時間丟失基於本地時間而非GMT建立 ECMAScript5添加了Date.now()方法,返回表示調用這個方法時的日期和時間的毫秒數
3.1 繼承的方法

Data類型也重寫了toLocaleString(),toString()和valueOf()方法 前兩個方法在不一樣的瀏覽器中返回的日期和時間格式截然不同

3.2 日期格式化方法

Data類型有專門用於將日期格式化爲字符串的方法

  • toDataString ()
  • toTimeString ()
  • toLocaleDataString ()
  • toLocaleTimeString ()
  • toUTCString ()
3.3 日期/時間組件方法

直接取得和設置日期值中特定部分的方法

4. RegExp類型

ECMAScript經過RegExp類型來支持正則表達式

var expression = /pattern/flags ;

正則表達式的匹配模式支持下列的3個標誌

  • g: 表示全局模式,即模式將被應用於全部字符
  • i: 表示不區分大小寫模式
  • m: 表示多行模式 使用正則表達式字面量和使用RegExp構造函數建立的正則表達式不同
4.1 RegExp實例屬性
  • global:布爾值,是否設置了g標誌
  • ignoreCase:布爾值,是否設置了i標誌
  • lastIndex:整數,表示開始搜索下一個匹配項的字符位置,從0算起
  • multiline:布爾值,是否設置了m標誌
  • source:正則表達式的字符串表示
4.2 RegExp實例方法

RegExp的主要方法是exec(),專門爲捕獲組而設計的。exec()接受一個參數,即要應用模式的字符串,而後返回包含第一個匹配項信息的數組;或者在沒有匹配項的狀況下返回null。返回的數組包含兩個額外的屬性:index和input。 index表示匹配項在字符串的位置,input表示應用正則表達式的字符串 RegExp的第二個方法是tes(),它接受一個字符串參數,在模式與該參數匹配的狀況下返回true,不然返回false RegExp實例繼承的toStringtoLocaleString方法都會返回正則表達式的字面量

4.3 RegExp構造函數屬性

構造函數包含一些屬性,基於所執行的最近一次正則表達式操做而變化。這些屬性分別有一個長屬性名和短屬性名

  • input $_
  • lastMatch $&
  • lastParen $+
  • leftContext $`
  • multiline $*
  • rightContext $'
4.4 模式的侷限性

ECMAScript正則表達式有一些不支持的特性

5. Function類型

每一個函數都是Function類型的實例。 使用函數表達式定義函數,不必使用函數名

5.1 沒有重載

建立第二個函數會覆蓋引用第一個函數變量

5.2 函數聲明與函數表達式

函數聲明和函數表達式並不是徹底一致,

alert(sum (10, 10));
function sum(num1 + num2) {
	return num1 + num2;
}
alert (sum (10,10));
var sum = function (num1, num2) {
	return num1 + num2;
};

第一個代碼不會出錯,第二個代碼就會出錯

5.3 做爲值的函數

能夠將一個函數做爲另外一個函數的結果返回

function callSomeFunction (someFunction, someArgument) {
	return someFunction (someArgument);
}
5.4 函數內部屬性

函數內部有兩個特殊的對象,就是arguments和this。arguments主要用途是保存函數參數,它有一個名叫callee的屬性,該屬性是一個指針,指向擁有arguments對象的函數

function factorial (num) {
	if (num < 1) {
		return 1;
	} else {
		return num * factorial (num - 1);
	}
}

函數執行與函數名牢牢耦合在一塊兒,爲了消除這種緊密耦合現象可使用arguments.callee

function factorial (num) {
	if (num < 1) {
		return 1;
	} else {
		return num * arguments.callee(num - 1);
	}
}

this引用的是函數執行的環境對象 函數的名字是一個包含指針的變量

5.5 函數屬性和方法

每一個函數都包含兩個屬性:length和prototype。 在建立自定義引用類型和實現繼承是,prototype屬性極爲重要 每一個函數都包含兩個非繼承而來的方法:apply()call(),實際上等於設置函數體內this對象的值 apply()方法接收兩個參數:一個是運行函數的做用域,另外一個是參數數組

function sum(num1, num2) {
	return num1 + num2;
}

function callsum (num1, num2){
	return sum.apply(this, arguments);
}

call方法和apply方法相同。第一個參數沒有變化,不過第二個參數要逐個枚舉出來 它們真正強大的地方在於可以擴充函數賴以運行的做用域

window.color = "red";
var o = { color: "blue"};

function sayColor(){
	alert (this.color);
}

sayColor();                                     //red
sayColor.call(this);                       //red
sayColor.call(window)                //red
sayColor.call(o);                        //blue

另外一個方法bind()這個方法會建立一個實例,其中this的值會被綁定傳給bind()函數的值

window.color = "red";
var o = { color: "blue"};

function sayColor(){
	alert (this.color);
}
var objectSayColor = sayColor.bind(o);
 objectSayColor();           //blue

6. 基本包裝類型

ECMAScript提供三個特殊的引用類:Boolean、Number、String. 每讀取一個基本類型值,後臺會建立一個對應的基本包裝類型的對象 基本類型值不是對象,於是不應有方法,其實後臺會自動進行處理,定義對象 引用類型與基本包裝類的主要區別在於對象的生存週期 new操做符建立的引用類型實例,在離開當前做用域前會一直保存在內存裏。而自動建立的基本包裝類型的對象,只存在於代碼的執行瞬間,而後當即被銷燬 使用new調用基本包裝類型的構造函數與直接調用同名的轉型函數是不同的 例如:

var value = "25";
var number = Number(value);             //轉型函數
alert (typeof number);                        //number

var obj = new Number(value);           //構造函數
alert (typeof obj);                              //object
6.1 Boolean類型

基本類型與引用類型的布爾值有很大的區別。 建議永遠不要使用Boolean對象

6.2 Number類型

此類型提供了一些用於將數值格式化爲字符串的方法 toFixed()按照指定的小數位返回字符串 toExponential()返回以指數表示法 toPrecision()可能返回固定大小(fixed)格式,也可能返回指數格式(Exponential)

6.3 String類型
  1. 字符方法 用於訪問字符串中特定字符的方法:charAt()charCodeAt() 其中charCodeAt()會返回特定位置的字符編碼 ECMAScript5提供一種用方括號加數字索引來訪問字符串中特定字符
  2. 字符串操做方法 concat()方法:將一個或多個字符串拼接,返回拼接獲得的新字符串 但實踐中使用最多的仍是加號操做符 三個基於字符串建立新字符串的方法:slice()substr()substring() slice和substring第一個參數指定字符串開始的位置,第二個參數指定字符串最後一個字符後面的位置。 substr第二個參數值指定返回的字符個數 若給定參數是負數,它們的行爲不盡相同 slice()方法會將傳入的負值與字符串長度相加,substr()會將負的第一個參數加上字符串的長度,第二個負的參數轉化爲0,substring()方法會將全部負值轉化爲0
  3. 字符串位置方法 從字符串中查找子字符串的方法:indexOf()lastIndexOf()方法 其中indexOf是從前向後查找。lastIndexOf是從後向前查找。 均可以接收可選的第二個參數,表示從那個位置開始查找 將返回的位置保存在數組positions中,以便未來調用
  4. trim()方法 建立一個副本,刪除前置及後綴的全部空格,而後返回結果
  5. 字符串大小寫轉換方法 toLowerCase()toUpperCase()toLocaleLowerCase()toLocaleUpperCase() 後二是針對特定地區實現
  6. 字符串模式的匹配方法 match()方法,只接受一個參數,要麼是一個正則表達式,要麼是一個RegExp對象 search()方法,參數與match相同。此方法返回字符串第一個匹配項的索引;若是沒有匹配項,則返回-1 replace()方法,替換字符串 split()方法,基於指定的分隔符將一個字符串分割成多個字符串
  7. localeCompare()方法 比較兩個字符串的值,並返回下列值中的一個
  • 若是字符串在字母表中排在字符串參數以前,則返回一個負數
  • 若是字符串等於字符參數,則返回0
  • 若是字符串在字母表排在字符參數以後,則返回一個正數
  1. fromCharCode()方法 接收一或多個字符編碼,而後將他們轉換爲一個字符串
  2. HTML方法 簡化常見HTML格式化任務的方法 詳見JavaScript高程p130

7. 單體內置對象

ECMA-262定義了兩個單體內置對象

7.1 Global對象

全部在全局做用域中定義的屬性和函數都是Global對象的屬性

  1. URI編碼方法 Global對象的encodeURI方法和encodeURIComponent方法能夠對URI(通用資源標識符)進行編碼,以便發送給瀏覽器。 encodeURI()主要用於整個URI,encodeURIComponent()用於URI的某一段 encodeURI()不會對自己屬於URI的特殊字符進行編碼,而encodeURIComponent()對任何非標準字符進行編碼 與兩者對應的解碼分別是decodeURI()decodeURIComnent()
  2. eval()方法 此方法就像一個完整的ECMAScript解析器,只接受一個參數,即要執行的ECMAScript字符串 eval()執行的代碼能夠引用在包含環境中定義的變量 嚴格模式下,在外部訪問不到eval()中建立的變量或函數
  3. Global屬性 全部原生引用類型的構造函數項Object和Function,都是Global對象的屬性
  4. window對象 Web瀏覽器是將這個全局變量做爲window對象的一部分加以實現
7.2 Math對象
  1. math對象屬性 大都是可能在計算中用到的特殊值,例如Math.E、Math.LN10等
  2. min()和max()方法 肯定一組數值的最大值和最小值
  3. 舍入方法
  • Math.ceil
  • Math.floor
  • Math.round
  1. random()方法 返回一個大於等於0小於1的一個隨機數
  2. 其餘方法 詳見JavaScript高程p136
相關文章
相關標籤/搜索