js第五章引用型別

2021-07-24 12:35:26 字數 4676 閱讀 3213

5.2.6陣列的操作方法:

concat():基於當前陣列中的所有項建立乙個新陣列,返回的是新陣列。

該方法會先建立當前陣列的乙個副本,然後將接收到的引數新增在這個副本的末尾,最後返回新構建的陣列。

slice()

:選取陣列部分項。

兩引數,分別是要返回項的起始和結束位置。

splice():向陣列的中部插入項。

splice(a,b):表示刪除。a表示要刪除的第一項的位置,b表示要刪除的項數。

splice(a,0,b):表示插入。 a是插入的位置 b是插入的的字串。

splice(a,c,b):表示替換。a起始位置,b要刪除的項數,c要插入的任意數量的項。

5.2.7位置方法:

indexof()和lastindexof():都接受兩個引數。要查詢的項和(可選的)表示查詢起點位置的索引。

其中,indexof()方法從陣列的開頭開始向後查詢,lastindexof()方法則從陣列的末尾開始向前查詢。

兩方法都是返回要查詢的項在陣列中的位置,或者沒找到返回-1。

在比較第乙個引數與陣列中的每一項時,會使用全等操作符,也就是說,要求查詢的項必須嚴格相等。

<———————————————>

5.2.8迭代方法:5個。

都接受兩個引數:要在每一項上執行的函式和(可選的)執行該函式的作用域物件——影響this的值。

傳入這些方法中的函式會接收三個引數:陣列項的值item,該項在陣列中的位置index和陣列物件本身array。

對於陣列中的每一項執行給定函式:

1.every():如果該函式對每一項都返回true,則返回true.

2.filter():該函式會返回true的項組成的陣列。

3.foreach():這個函式沒有返回值。

4.map():返回每次函式呼叫的結果組成的陣列。

5.some():如果該函式對於任一項返回true,則返回true.

5.2.9縮小方法:reduce()和reduceright()

都會迭代陣列的所有項,然後構建乙個最終返回的值。

reduce()從陣列的第一項開始,逐個遍歷到最後。

reduceright()順序相反。

它兩除了遍歷順序,其他完全相同。

這兩個方法都接受兩個引數:乙個在每一項上呼叫的函式和(可選的)作為縮小的初始值。

給reduce()和reduceright()的函式接收4個引數:前乙個值、當前值、項的索引 和 陣列物件。

這個函式返回的任何值都會作為第乙個引數自動傳給下一項。

示例:求和

var values = [1,2,3,4,5];

var sum = values.reduce(function

(prev,cur,index,array)

); alert(sum);//15

5.3date型別

date.parse()和date.utc():都返回日期的毫秒數。

date.parse():接收乙個表示日期的字串引數,然後根據這個字串返回相應日期的毫秒數。

如果該字串不能表示日期,那它會返回nan。

實際上,直接將表示日期的字串傳遞給date建構函式,也會在後台呼叫date.parse()。

與date.parse()不同的是,date.utc()在構建時使用不同的資訊。

引數分別為n年、基於0的月份(1月是0,2月是1,以此類推)、月中的哪一天(1~31),小時(0~23)、分鐘以及毫秒數。只有前兩個是必填的,如果月中沒有天數,預設是1,省略其他引數,系統統統預設是0。

es5中新增date.now()方法,返回表示呼叫這個方法時的日期和時間的毫秒數。

支援的瀏覽器有ie9+、 firefox3+、

safari3+、opera10.5和chrome。

在不支援的瀏覽器中,使用+操作符將物件轉換成字串,也可達到目的。

var start = +new

date();

date日期格式化方法:

todatestring();以特定於實現的格式顯示星期幾、月、日和年。

totimestring():顯示時分秒和時區。

略。。。

5.4 regexp型別

表示式:

var expression = / pattern / flags;

pattern 簡單的正規表示式

flags 標明正規表示式的行為。有三個:

g:全域性模式

i:不區分大小寫模式

m:多行模式

這三種模式可以組合使用。如:

var pattern = /[bc]at/gi;

5.4.1regexp例項屬性

global:布林值,表示是否設定g標誌。

ignorecase:布林值,表示是否設定了i標誌。

lastindex:整數,表示開始搜尋下乙個匹配項的字元位置,從0算起。

multiline:布林值,表示是否設定了m標誌。

source:正規表示式的字串表示,按照字面量形式而非傳入建構函式中的字串模式返回。

這些屬性可以獲知乙個正規表示式的各方面資訊。

略。。。

<————————————————————->

5.5function型別

函式實際上是物件。每個函式都是function型別的實列,而且都與其他引用型別一樣具有屬性和方法。

由於函式是物件,因此函式名實際上也是乙個指向函式物件的指標,不會與某個函式繫結。

函式使用函式宣告語法定義。如下:

function sum(num1,num2)

等價於:

var sum = function();//注意不要丟掉分號 該函式形式沒有函式名

還有一種定義函式的方式:使用function建構函式。function建構函式可以接收任意數量的引數,但是最後乙個引數始終被看成是函式體,而前面的引數則列舉出新函式的引數。示例:

var sum = new function(「a」,」b」,」return a + b」);//不推薦,原因如下:

這種語法會導致解析兩次**:

第一次是解析常規ecmascript**,第二次是解析傳入建構函式中的字串。

從而影響效能。

該語法對於理解」函式是物件,函式名是指標」概念非常直觀。

函式名是指標,即乙個函式可能有多個名字。

5.5.1沒有過載(深入理解)

同名函式 ,後者會覆蓋前者。

5.5.2函式宣告與函式表示式

區別:解析器在向執行環境中載入資料時,對資料宣告和函式表示式並非一視同仁。

解析器會率先讀取函式的宣告,並使其在執行任何**之前可用(可以訪問);至於函式表示式,則必須等到解析器執行到它所在的**行,才會真正被解釋執行。

alert(sum(2,3));

function

sum(a,b)

上面可以正常執行,因為在**開始執行之前,解析器就已經通過乙個名為函式宣告提公升的過程,讀取並將函式宣告新增到執行環境中。

對於代買求值時,js引擎在第一遍會宣告函式並將它們放到源**樹的頂部。下面**會在執行期間產生錯誤:

alert(sum(2,3));

var sum = function

(a,b)

原因在於函式位於乙個初始化語句中,而不是乙個函式宣告。換句話說,在執行到函式所在的語句之前,變數sum中不會儲存有對函式的引用;而且,由於第一行代買就會導致」unexpected identifier」(意外識別符號)錯誤,實際上也不會執行到下一行。

5.5.3作為值得函式

函式名本身就是變數,所以函式也可作為值來使用。也即是,不僅可以像傳遞引數一樣把乙個函式傳遞給另乙個函式,而且可以將乙個函式作為另外乙個函式的結果返回。

5.5.4函式內部屬性

在函式內部,有兩個特殊的物件;arguments和this

arguments是乙個類陣列物件,包含著傳入函式中的所有引數。雖然它主要用途是儲存函式引數,但它還有乙個名叫callee的屬性。該屬性是乙個指標,它指向擁有這個arguments物件的函式。

示例:

function factorial(num) else

}this 引用的是函式執行的環境物件。當在網頁的全域性作用域中呼叫函式時,this物件引用的就是window。

js 第五章總結(引用型別)

引用型別的值 物件 是引用型別的乙個例項,它是一種資料結構,用於將資料和功能組織在一起,也常被稱為類。一 object型別 1.建立方式 1 new 操作符 var person new object person.name lili person.age 18 2 物件字面量 var person...

JS 第五章 幾個引用型別簡述

1.let obj new object 會呼叫建構函式 2.let obj 不會呼叫建構函式 1.let atrr obj attr 2.let attr obj.attr 1 建立方法 1.let arr new array 3 規定了長度為3 如果取 arr 3 長度之外 則值為undefin...

第五章 基元型別引用型別和值型別

checked開啟時,如果發生溢位會丟擲異常,unchecked則不會排除異常。編譯器預設是關閉溢位檢查的unchecked。若要開啟溢位檢查,使用 checked 在vs的專案屬性中也可設定開啟與否。也可以給一段 新增這樣的標記。如果這段 中呼叫了另外乙個方法,這個方法是不受這個標記控制的。sys...