成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS學(xué)習(xí)筆記(第5章)(引用類型)

heartFollower / 497人閱讀

摘要:對(duì)象是某個(gè)特定引用類型的實(shí)例,新對(duì)象是使用操作符后跟一個(gè)構(gòu)造函數(shù)來(lái)創(chuàng)建。方法只接收一個(gè)參數(shù),即用作分隔符的字符串,然后返回包含所有數(shù)組項(xiàng)的字符串如果不給方法傳入任何值,或者給它傳入,則使用逗號(hào)作為分隔符。

引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)據(jù)和功能組織在一起。引用類型有時(shí)候也被稱為對(duì)象定義,因?yàn)樗麄兠枋龅氖且活悓?duì)象所具有的屬性和方法。對(duì)象是某個(gè)特定引用類型的實(shí)例,新對(duì)象是使用new操作符后跟一個(gè)構(gòu)造函數(shù)來(lái)創(chuàng)建。

var  person = new Object();
5.1 Object類型

1. 創(chuàng)建Object實(shí)例
創(chuàng)建Object實(shí)例的方式有兩種:
(1)使用new操作符后跟Object構(gòu)造函數(shù)

var person = new Object();
person.name = "Chris";
person.age = 22;

(2)使用對(duì)象字面量表示法

var person = {
name : "Chris",
age : 22
};

注意:
1) 在對(duì)象字面量中,使用逗號(hào)來(lái)分隔不同的屬性,但在最后一個(gè)屬性后面不能添加逗號(hào)。否則在一些早 版本瀏覽器中導(dǎo)致錯(cuò)誤。
2)在使用對(duì)象字面量語(yǔ)法時(shí),屬性名也可以使用字符串;
3)使用對(duì)象字面量語(yǔ)法時(shí),如果留空其花括號(hào),則可以定義只包含默認(rèn)屬性和方法的對(duì)象,如下:

var person = {};
person.name = "Chris";
person.age = 22;

2. 訪問(wèn)對(duì)象屬性
(1)點(diǎn)表示法

 alert(person.name);  //"Chris"

(2)方括號(hào)表示法

alert(person["name"]);  //"Chris"

注意:1)方括號(hào)表示法的主要優(yōu)點(diǎn)是可以通過(guò)變量來(lái)訪問(wèn)屬性;

 var propertyName = "name";
 alert(person[propertyName]);  //"Chris"

2)如果屬性名中包含會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤的字符,或者屬性名使用的是關(guān)鍵字或者保留字,也可以使用方括號(hào)表示法;

person["first name"] = "Chris";  

因?yàn)?first name"中包含一個(gè)空格,所以不能讓使用點(diǎn)表示法來(lái)訪問(wèn)它們,然而,屬性名中是可以包含非字母非數(shù)字的,這時(shí)候就可以使用方括號(hào)表示法來(lái)訪問(wèn)它們;
3)通常,除非必須使用變量來(lái)訪問(wèn)屬性,否則建議使用點(diǎn)表示法。

5.2 Array類型

1、與其他語(yǔ)言不同的是:
(1)ECMScript數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù);
(2)ECMScript數(shù)組的大小是可以動(dòng)態(tài)調(diào)整的,即可以隨著數(shù)據(jù)的添加自動(dòng)增長(zhǎng)以容納新增數(shù)據(jù);
2、創(chuàng)建數(shù)組的基本方式有兩種:
(1)使用Array構(gòu)造函數(shù);

var colors = new Array();

(2)使用數(shù)組字面量表示法,數(shù)組字面量由一對(duì)包含數(shù)組項(xiàng)的方括號(hào)表示,多個(gè)數(shù)組之間以逗號(hào)隔開(kāi);

var colors = ["red", "blue", "yellow"];

3、在讀取和設(shè)置數(shù)組的值時(shí),要使用方括號(hào)并提供相應(yīng)值的基于0的數(shù)字索引;

var colors = ["red", "blue", "green"] //定義一個(gè)字符串?dāng)?shù)組`
alert(colors[0]); //顯示第一項(xiàng)
colors[2] = "black";  //修改第三項(xiàng)
colors[3] = "brown";  //新增第四項(xiàng)

4、數(shù)組的項(xiàng)數(shù)保存在其length屬性中,這個(gè)屬性始終會(huì)返回0或更大的值;

var colors = ["red", "blue", "green"]; //定義一個(gè)字符串?dāng)?shù)組
alert(colors.length);  //3

5、通過(guò)設(shè)置數(shù)組的length屬性,可以從數(shù)組的末尾移除項(xiàng)或者向數(shù)組中添加新項(xiàng);

var colors = ["red", "blue", "green"] //定義一個(gè)字符串?dāng)?shù)組
colors.length = 2;
alert(colors[2]);  //undefined(移除項(xiàng))

該例中的數(shù)組colors一開(kāi)始有3個(gè)值,將其length屬性設(shè)置為2會(huì)移除最后一項(xiàng)(位置為2的那一項(xiàng)),結(jié)果再訪問(wèn)colors[2]就會(huì)顯示undefined。如果將其length屬性設(shè)置為大于數(shù)組項(xiàng)數(shù)的值,則新增的每一項(xiàng)都回去的undefined值;

var colors = ["red", "blue", "green"] //定義一個(gè)字符串?dāng)?shù)組
colors.length = 4;
alert(colors[3]);  //undefined(新增項(xiàng))

利用length屬性也可以方便地在數(shù)組末尾添加新項(xiàng);

var colors = ["red", "blue", "green"] //定義一個(gè)字符串?dāng)?shù)組
colors[colors.length] = "black";  //(在位置3)添加一種顏色
colors[colors.length] = "brown";  //(在位置4)再添加一種顏色

當(dāng)把一個(gè)值放在超出當(dāng)前數(shù)組大小的位置上時(shí),數(shù)組就會(huì)重新計(jì)算其長(zhǎng)度值,即長(zhǎng)度值等于最后一項(xiàng)的索引加1。
1. 檢測(cè)數(shù)組
(1)對(duì)于一個(gè)網(wǎng)頁(yè)或者有個(gè)全局作用域而言,使用instanceof操作符就能確定某個(gè)對(duì)象是不是數(shù)組;

if (value instanceof Array) {
   //對(duì)數(shù)組執(zhí)行某些操作
}

(2)Array.isArray()方法的目的是最終確定某個(gè)值到底是不是數(shù)組,而不管它是在哪個(gè)全局執(zhí)行環(huán)境中創(chuàng)建的。

if (Array.isArray(value)) {
  //對(duì)數(shù)組執(zhí)行某些操作
}

2. 轉(zhuǎn)換方法
所有對(duì)象都具有toLocaleString()toString()valueOf()方法。其中,調(diào)用valueOf()返回的還是數(shù)組本身,而調(diào)用數(shù)組的toString()方法會(huì)返回有數(shù)組中每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串;
toLocalString()方法經(jīng)常會(huì)返回與toString()和valueOf()方法相同的值,但也不總是如此。

(1)當(dāng)調(diào)用數(shù)組的toLocaleString()方法時(shí),調(diào)用的是每一項(xiàng)的toLocaleString()方法。

(2)采用alert()輸出時(shí),由于alert()要接收字符串參數(shù),所以它會(huì)在后臺(tái)調(diào)用toString()方法,由此會(huì)得到與直接調(diào)用toString()方法相同的結(jié)果。

數(shù)組繼承的toLocaleString()、toString()和valueOf()方法,在默認(rèn)情況下都會(huì)以逗號(hào)分隔的字符串的形式返回?cái)?shù)組項(xiàng),而如果使用join()方法,則可以使用不同的分隔符來(lái)構(gòu)建這個(gè)字符串(將數(shù)組轉(zhuǎn)化為字符串)。join()方法只接收一個(gè)參數(shù),即用作分隔符的字符串,然后返回包含所有數(shù)組項(xiàng)的字符串.如果不給join()方法傳入任何值,或者給它傳入undefined,則使用逗號(hào)作為分隔符。split()將字符喜轉(zhuǎn)換為數(shù)組。

var colors = ["red", "green", "blue"];
alert(colors.join(","));  //red,green,blue
alert(colors.join("||"));  //red||green||blue

var color1 = "2:3:4:5";
color1.split(":");    //["2","3","4","5"]

3. 棧方法
棧是一種LIFO(Last-In-First-Out,先進(jìn)后出)的數(shù)據(jù)結(jié)構(gòu),也就是最新添加的項(xiàng)最早被移除。而棧中項(xiàng)的插入(叫做推入)和移除(叫做彈出),只發(fā)生在一個(gè)位置——棧的頂部。
push()方法可以接收任意數(shù)量的參數(shù),把它們逐個(gè)添加到數(shù)組末尾,并返回修改后數(shù)組的長(zhǎng)度;
pop()方法從數(shù)組末尾移除最后一項(xiàng),減少數(shù)組的length值,然后返回移除的項(xiàng);

var colors = new Array();  //創(chuàng)建一個(gè)數(shù)組
var count = colors.push("red", "green");  //推入兩項(xiàng)
alert(count);  //2

var item = colors.pop(); //取得最后一項(xiàng)
alter(item);  //"green"
alert(colors.length); //1

4. 隊(duì)列方法
隊(duì)列數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)規(guī)則是FIFO(First-In-First-Out,先進(jìn)先出)。隊(duì)列在列表的末端添加項(xiàng),從列表的前端移除項(xiàng);
(1)shift()方法,它能夠移除數(shù)組中的第一項(xiàng)并返回該項(xiàng),同時(shí)將數(shù)組長(zhǎng)度減1(刪除第一項(xiàng));
(2)unshift()方法,它能在數(shù)組前端添加任意個(gè)項(xiàng)并返回新數(shù)組的長(zhǎng)度。
(3)結(jié)合使用shift()和push()方法,可以像使用隊(duì)列一樣使用數(shù)組;(末端添加項(xiàng),前端移除項(xiàng))

var colors = new Array(); //創(chuàng)建一個(gè)數(shù)組
var count = colors.push("red", "green"); //推入兩項(xiàng)
alert(count);  //2

count = colors.push("black");  //末端推入另一項(xiàng)

var item = colors.shift();  //取得第一項(xiàng)
alert(item); //"red" 
alert(colors.length);  //2
(4)同時(shí)使用unshift()和pop()方法,可以從相反的方向來(lái)模擬隊(duì)列;(前端添加項(xiàng),末端移除項(xiàng))
var colors = new Array(); //創(chuàng)建一個(gè)數(shù)組`
var count = colors.push("red", "green"); //推入兩項(xiàng)
alert(count);  //2

count = colors.unshift("black");  //前端推入另一項(xiàng)

var item = colors.pop();  //取得最后一項(xiàng)
alert(item); //"green" 
alert(colors.length);  //2

5. 重排序方法
(1)數(shù)組中已經(jīng)存在的兩個(gè)可以直接用重排序的方法:reverse()sort()方法
reverse()方法會(huì)反轉(zhuǎn)數(shù)組項(xiàng)的順序;
在默認(rèn)情況下,sort()方法按升序排列數(shù)組項(xiàng),sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,然后比較得到字符串,已確定如何排序,即使數(shù)組中的每一項(xiàng)都是數(shù)值,sort()方法比較的也是字符串。
(2)比較函數(shù)(P93)

function compare(value1,value2) {
    if(value1 < value2) {
        return -1;
    }else if(value1 > value2){
        return 1;
    }else{
        return 0;
    }
}

6. 操作方法
(1)concat()方法可以基于當(dāng)前數(shù)組中的所有項(xiàng)創(chuàng)建一個(gè)新的數(shù)組
(2)slice()方法能夠基于當(dāng)前數(shù)組中的一個(gè)多個(gè)項(xiàng)創(chuàng)建一個(gè)新的數(shù)組。slice()方法可以接收一個(gè)或者兩個(gè)參數(shù),即要返回項(xiàng)的起始和結(jié)束位置。在只有一個(gè)參數(shù)的情況下,slice()方法返回從該參數(shù)指定位置開(kāi)始到當(dāng)前數(shù)組末尾的所有項(xiàng);如果有兩個(gè)參數(shù),該方法返回起始和結(jié)束位置之間的項(xiàng)——但不包括結(jié)束位子的項(xiàng)。注意,slice()方法不會(huì)影響原始數(shù)組。

var colors = ["red", "green", "blue", "yellow","purple"];
var colors2 = colors.silce(1);
var colors3 = colors.slice(1,4);

alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow

注意:
1)如果slice方法的參數(shù)中有一個(gè)附屬,則用數(shù)組長(zhǎng)度加上該數(shù)來(lái)確定相應(yīng)的位置;
2)如果結(jié)束位置小于起始位置,則返回空數(shù)組
(3)splice()方法的主要用途是向數(shù)組的中部插入項(xiàng)
1)刪除:可以刪除任意數(shù)量的項(xiàng),只需指定2個(gè)參數(shù):splice(要?jiǎng)h除的第一項(xiàng)的位置,要?jiǎng)h除的項(xiàng)數(shù))
2)插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需提供3個(gè)參數(shù)splice(起始位置,要?jiǎng)h除的項(xiàng)數(shù),要插入的項(xiàng))
3)替換:可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng),只需指定3個(gè)參數(shù)
splice(起始位置,要?jiǎng)h除的項(xiàng)數(shù),要插入的任意數(shù)量的項(xiàng)),插入的項(xiàng)數(shù)不必與刪除的項(xiàng)數(shù)相等;

var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1)    //刪除第一項(xiàng)
alert(colors);  //green,blue
alert(removed); //red,返回的數(shù)組中只包含一項(xiàng)

removed = colors.splice(1,0,"yellow","orange");  //從位置1開(kāi)始插入兩項(xiàng)
alert(colors);  //green,yellow,orange,blue
alert(removed);  //返回的是一個(gè)空數(shù)組

removed = colors.splice(1,1,"red","purple");   //插入兩項(xiàng),刪除一項(xiàng)
alert(colors); //green,red,purple,orange,blue
alert(removed); //yellow,返回的數(shù)組中只包含一項(xiàng)

7. 位置方法
indexOf()lastIndexOf(),這兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找起點(diǎn)位置的索引。其中,indexOf()方法從數(shù)組的開(kāi)頭(位置0 )開(kāi)始向后查找。LastIndexOf()方法則從數(shù)組的末尾向前查找。這兩個(gè)方法都返回要查找的項(xiàng)在數(shù)組中的位置,或者在沒(méi)有找到的情況下返回-1.

var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4));  //3
alert(numbers.lastIndexOf(4));   //5

alert(numbers.indexOf(4,4));  //5
alert(numbers.lastIndexOf(4,4));   //3

8. 迭代方法
每個(gè)方法都接收兩個(gè)參數(shù):要在每一項(xiàng)運(yùn)行的函數(shù)和(可選的)運(yùn)行該函數(shù)的作用域?qū)ο?。傳入這些方法中的函數(shù)會(huì)接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對(duì)象本身

every():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true;

filter():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組;

forEach():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),該方法沒(méi)有返回值;

map():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組;

some():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true。

var numbers = [1,2,3,4,5,4,3,2,1];
  var everyResult = numbers.every(function(item,index,array){
      return (itrem>2);
  });
  alert(everyResult);   //false
  
  var someResult = numbers.every(function(item,index,array){
    return (itrem>2);
});
  alert(someResult);  //true

注意:對(duì)every()來(lái)說(shuō),傳入的函數(shù)必須對(duì)每一項(xiàng)都返回true,這個(gè)方法才返回true;而some()方法則是只要傳入的函數(shù)對(duì)數(shù)組中的某一項(xiàng)返回true,就會(huì)返回true。

9. 歸并方法
ECMAScript5新增了兩個(gè)歸并數(shù)組的方法:reduce()和reduceRight()。這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回值。其中reduce()方法從數(shù)組的第一項(xiàng)開(kāi)始,逐個(gè)遍歷到最后。而reduceRight()則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng)。
以上兩種方法都接收兩個(gè)參數(shù):在每一項(xiàng)調(diào)用的函數(shù)、作為歸并基礎(chǔ)的初始值。
傳給reduce()和reduceRight()的函數(shù)接收四個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。以第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)就是數(shù)組的第二項(xiàng)。

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
5.3 Date類型

要?jiǎng)?chuàng)建一個(gè)日期對(duì)象,使用new操作符和Date構(gòu)造函數(shù)即可
var now = new Date();
//在調(diào)用Date構(gòu)造函數(shù)而不傳遞參數(shù)的情況下,新創(chuàng)建的對(duì)象自動(dòng)獲得當(dāng)前日期和時(shí)間
如果想根據(jù)特定的日期和時(shí)間創(chuàng)建日期對(duì)象,必須傳入該日期的毫秒數(shù)。或者使用Date.parse()Date.UTC();
Date.parse()方法接收一個(gè)表示日期的字符串參數(shù),然后嘗試根據(jù)這個(gè)字符串返回相應(yīng)日期的毫秒數(shù);如果傳入Date.parse()方法的字符串不能表示日期,那么它會(huì)返回NaN;如果直接將表示日期的字符串傳遞給Date構(gòu)造函數(shù),也會(huì)在后臺(tái)調(diào)用Date.parse()。
Date.UTC()方法同樣也返回表示日期的毫秒數(shù),Date.UTC()的參數(shù)分別是年份、基于0的月份,月中的哪一天(1到31)、小時(shí)數(shù)(0到23)、分鐘、秒以及毫秒數(shù)。在這些參數(shù)中,只有年和月是必需的
Date.now()方法,返回表示調(diào)用這個(gè)方法時(shí)的日期和時(shí)間的毫秒數(shù)。
1. 繼承的方法
Date類型也重寫了toLocaleString()、toString()和valueOf()方法。

Date類型的toLocaleString()方法會(huì)按照與瀏覽器設(shè)置的時(shí)區(qū)相適應(yīng)的格式返回日期和時(shí)間。(大致意味時(shí)間格式中會(huì)包含AM或PM,但不會(huì)包含時(shí)區(qū)信息);

Date類型的toString()方法則通常返回帶有時(shí)區(qū)信息的日期和時(shí)間,其中時(shí)間一般以軍用時(shí)間表示;

Date類型的valueOf()方法則根本不返回字符串,而是返回日期的毫秒表示。因此,可以方便使用比較操作符(小于或大于)來(lái)比較日期值。

2. 日期格式化方法

toDateString()——以特定于實(shí)現(xiàn)的格式顯示星期幾、月、日和年;

toTimeString()——以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒和時(shí)區(qū);

toLocaleDateString()——以特定于地區(qū)的格式顯示星期幾、月、日和年;

toLocaleTimeString()——以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒和時(shí)區(qū);

toUTCString()——以特定于實(shí)現(xiàn)的格式完整的UTC日期;

3. 日期/時(shí)間組件方法 (P102)

5.4 RegExp類型

RegExp類型是用來(lái)支持正則表達(dá)式:
(1)第一種創(chuàng)建正則表達(dá)式的方法如下:
var expression = / pattern / flags;
其中的模式(pattern)部分可以是任何簡(jiǎn)單或復(fù)雜的正則表達(dá)式,可以包含字符類、限定符、分組、向前查找以及反向引用。
每個(gè)正則表達(dá)式都可以帶有一個(gè)或者多個(gè)標(biāo)志(flags),用以標(biāo)明正則表達(dá)式的行為。正則表達(dá)式的匹配模式支持下列3個(gè)標(biāo)志:

g:表示全局(global)模式,即模式將被應(yīng)用于所有字符串,而非在發(fā)現(xiàn)第一個(gè)匹配項(xiàng)時(shí)立即停止;

i:表示不區(qū)分大小寫(case-insensitive)模式,即在確定匹配項(xiàng)時(shí)忽略模式與字符串的大小寫;

m:表示多行(multiline)模式,即在到達(dá)一行文本末尾時(shí)還會(huì)繼續(xù)查找下一行是否存在與模式匹配的項(xiàng)

模式中使用的所有元字符都必須轉(zhuǎn)義。正則表達(dá)式中的元字符包括:( [ { ^ $ | ) ? * + . ] }
(2)另一種創(chuàng)建正則表達(dá)式的方式是使用RegExp函數(shù),它接收兩個(gè)參數(shù):一個(gè)是要匹配的字符串模式,另一個(gè)是可選的標(biāo)志字符串。
//匹配第一個(gè)"bat"或"cat",不區(qū)分大小寫
var pattern1 = /[bc]at/i; //使用第一種方法創(chuàng)建
var pattern2 = new RegExp("[bc]at","i"); //使用RegExp函數(shù)實(shí)現(xiàn)
由于RegExp構(gòu)造函數(shù)的模式參數(shù)是字符串,所以在某些情況下要對(duì)字符串進(jìn)行雙重轉(zhuǎn)義。

正則表達(dá)式字面量始終會(huì)共享同一個(gè)RegExp實(shí)例,而使用構(gòu)造函數(shù)創(chuàng)建的每一個(gè)新RegExp實(shí)例都是一個(gè)新實(shí)例。
1. RegExp實(shí)例屬性

global:布爾值,表示是否設(shè)置了g標(biāo)志;

ignoreCase:布爾值,表示是否設(shè)置了i標(biāo)志;

lastIndex:整數(shù),表示開(kāi)始搜索下一個(gè)匹配項(xiàng)的字符位置,從0算起。

multiline:布爾值,表示是否設(shè)置了m標(biāo)志;

source:正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)的字符串模式返回。

source屬性保存的是規(guī)范形式的字符串,即字面量形式所用的字符串。

2. RegExp實(shí)例方法
正則表達(dá)式的第一個(gè)方法是exec()鏈接描述: 接收一個(gè)參數(shù),即要應(yīng)用模式的字符串,然后返回包含第一個(gè)匹配信息的數(shù)組;或者在沒(méi)有匹配項(xiàng)的情況下返回null。exec() 方法還返回兩個(gè)屬性。index 屬性聲明的是匹配文本的第一個(gè)字符的位置(匹配項(xiàng)在字符串中的位置)。input 屬性則存放的是被檢索的字符串 string(表示應(yīng)用正則表達(dá)式的字符串)。

在數(shù)組中,第一項(xiàng)是與整個(gè)模式匹配的字符串,其他項(xiàng)是與模式中的捕獲組匹配的字符串(如果模式中沒(méi)有捕獲組,則該數(shù)組只包含一項(xiàng))

  var text = "mom and dad and baby";
  var pattern = /mom( and dad( and baby)?)?/gi;

  var matches = pattern.exec(text);  
  alert(matches.index);    //0
  alert(matches.input);    //"mom and dad and baby"
  alert(matches[0]);       //"mom and dad and baby"
  alert(matches[1]);       //"and dad and baby"
  alert(matches[2]);       //"and baby"

對(duì)于exec()方法而言,即使在模式中設(shè)置了全局標(biāo)志(g),他每次也只會(huì)返回一個(gè)匹配項(xiàng)。在不設(shè)置全局標(biāo)志的情況下,在同一個(gè)字符串上多次調(diào)用exec()將始終返回第一個(gè)匹配項(xiàng)的信息,而在設(shè)置全局變量的情況下,每次調(diào)用exec()則都會(huì)在字符串中繼續(xù)查找新匹配項(xiàng)。

正則表達(dá)式的第二個(gè)方法是test()鏈接描述:它接受一個(gè)字符串參數(shù),如果字符串 string 中含有與RegExpObject 匹配的文本,則返回true,否則返回false
3. RegExp構(gòu)造函數(shù)屬性

input:最近一次要匹配的字符串["$_"]

lastMatch:最近一次與整個(gè)正則表達(dá)式匹配的字符串["$&"]

lastParen:最近一次匹配的捕獲組["$+"]

leftContext:input字符串中l(wèi)astMatch之前的文本["$`"]

rightContext:input字符串中l(wèi)astMatch之后的文本["$""]

multiline:布爾值,表示是否所有表達(dá)式都使用多行模式["$*"]

    var text = "this has been a short summer";
    var pattern = /(.)hort/g;
    
    if(pattern.test(text)){
    alert(RegExp.input);  //this has been a short summer
    alert(RegExp.leftContext);  //this has been
    alert(RegExp.rightContext);  //summer
    alert(RegExp.lastMatch);  //short
    alert(RegExp.lastParen);  //a
    alert(RegExp.multiline);  //false
    }

注意:以上使用的長(zhǎng)屬性名都可以用相應(yīng)的短屬性名來(lái)代替,不過(guò)短屬性名不是有效的ECMAScript標(biāo)識(shí)符,因此必須通過(guò)方括號(hào)語(yǔ)法來(lái)訪問(wèn)它們。

var text = "this has been a short summer";
var pattern = /(.)hort/g;

if(pattern.test(text)){
alert(RegExp.$_);  //this has been a short summer
alert(RegExp["`$`"]);  
//this has been
alert(RegExp["$""]);  //summer
alert(RegExp["$&"]);  //short
alert(RegExp["$+"]);  //a
alert(RegExp["$*"]);  //false
}

4. 模式的局限性 (P109)

5.5 Function類型

1. 沒(méi)有重載(深入理解)
2. 函數(shù)聲明與函數(shù)表達(dá)式
3. 作為值的函數(shù)
4. 函數(shù)的內(nèi)部屬性
在函數(shù)內(nèi)部,有兩個(gè)特殊的對(duì)象:argumentsthis
(1)arguments是一個(gè)類數(shù)組對(duì)象,包含著傳入函數(shù)中的所有參數(shù),它的主要用途是保存函數(shù)參數(shù)。這個(gè)對(duì)象還有一個(gè)名叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。

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

轉(zhuǎn)變?yōu)?/p>

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

在這個(gè)重寫后的factorial()函數(shù)的函數(shù)體內(nèi),沒(méi)有再引用函數(shù)名factorial。這樣,無(wú)論引用函數(shù)時(shí)使用的是什么名字,都可以保證正常完成遞歸調(diào)用。
(2)函數(shù)內(nèi)部的另一個(gè)特殊對(duì)象是this。this引用的是函數(shù)執(zhí)行的環(huán)境對(duì)象(當(dāng)在網(wǎng)頁(yè)的全局作用域中調(diào)用函數(shù)時(shí),this對(duì)象引用的就是window)
!函數(shù)的名字僅僅是一個(gè)包含指針的變量而已
EMAScript也規(guī)范了另一個(gè)函數(shù)對(duì)象的屬性:caller這個(gè)屬性保存著 調(diào)用當(dāng)前函數(shù)的函數(shù)的引用
5. 函數(shù)屬性和方法
每個(gè)函數(shù)都包含兩個(gè)屬性:lengthprototype
(1)length屬性表示函數(shù)希望接收的命名參數(shù)的個(gè)數(shù)
(2)prototype屬性是保存他們所有實(shí)例方法的真正所在
(3)每個(gè)函數(shù)都包含兩個(gè)非繼承而來(lái)的方法:apply()call(),這兩個(gè)方法的用途都是在特定的作用域中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值。
apply()方法接收兩個(gè)參數(shù):在其中運(yùn)行的函數(shù)的作用域 和 參數(shù)數(shù)組
call()方法:第一個(gè)參數(shù)是this值沒(méi)有變化,變化的是其余參數(shù)都直接傳遞給函數(shù)。換句話說(shuō),在使用call()方法時(shí),傳遞給函數(shù)的參數(shù)必須逐個(gè)列舉出來(lái)。

function sum(num1,num2) {
return num1+num2; 
}
function callSum1(num1,num2) {
return sum.apply(this,arguments); //傳入arguments對(duì)象
}

function callSum2(num1,num2) {
return sum.apply(this,[num1,num2]); //傳入數(shù)組
}

function callSum3(num1,num2) {
return sum.call(this,num1,num2); //其余參數(shù)都直接傳遞給函數(shù)`
}

alert(callSum1(10,10));  //20
alert(callSum2(10,10));  //20
alert(callSum3(10,10));  //20

apply()和call()真正的用武之地在——能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域

windows.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

使用apply()或call()來(lái)擴(kuò)充作用于的最大好處就是,對(duì)象不需要與方法有任何耦合關(guān)系。
(4)bind()方法。這個(gè)方法會(huì)創(chuàng)建一個(gè)函數(shù)的實(shí)例,其this值會(huì)被綁定到傳給bind()函數(shù)的值。

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

function sayColor() {
alert(this.color);
}
var objectSayColor= sayColor.bind(o);
objectSayColor();   //blue
5.6 基本包裝類型

ECMAScript提供了3種特殊的引用類型:Boolean、Number和String
引用類型與基本包裝類型的主要區(qū)別就是對(duì)象的生存周期。使用new操作符創(chuàng)建的引用類型的實(shí)例,在執(zhí)行流離開(kāi)當(dāng)前作用域之前都一直保存在內(nèi)存中。而自動(dòng)創(chuàng)建的基本包裝類型的對(duì)象,則只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀。這意味著我們不能在運(yùn)行時(shí)為基本類型值添加屬性和方法。

var s1 = "some text";
s1.color = "red";
alert(s1.color); //undefined

!注意:使用new調(diào)用基本包裝類型的構(gòu)造函數(shù),與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的

var value = "25";
var number = Number(value); //轉(zhuǎn)型函數(shù)
alert(typeof number); //"number"

var obj = new Number(value); //構(gòu)造函數(shù)
alert(type of obj);  //"object"

1. Boolean類型
(1)Boolean類型是與布爾值對(duì)應(yīng)的引用類型。要?jiǎng)?chuàng)建Boolean對(duì)象,可以像下面這樣調(diào)用Boolean構(gòu)造函數(shù)并傳入true或者false值。

var BooleanObject= newBoolean(true);

Boolean類型的實(shí)例重寫了valueOf()方法,返回基本類型值true或false;重寫了toString()方法,返回字符串"true"和"flase"。

var falseObject = new Boolean(false);
var result = falseObject && true;   
alert(result);  //true 
(布爾表達(dá)式中的所有對(duì)象都會(huì)被轉(zhuǎn)化為true,因此falseObject對(duì)象在布爾表達(dá)式中代表的是true,結(jié)果true&&true就等于true) 

(2)基本類型與引用類型的布爾值還有兩個(gè)區(qū)別:
1)typeof操作符對(duì)基本類型返回"boolean",而對(duì)引用類型返回"object";
2)由于Boolean對(duì)象是Boolean類型的實(shí)例,所以使用instanceof操作符測(cè)試Boolean對(duì)象會(huì)返回true,而測(cè)試基本類型的布爾值則返回false。

var falseObject = new Boolean(false);
var falseValue = false;
alert(typeof falseObject); //Object
alert(typeof falseValue); //boolean
alert(falseObject instanceof Boolean); //true
alert(falseValue instanceof Boolean); //false

2. Number類型
(1)要?jiǎng)?chuàng)建Number對(duì)象,可以在調(diào)用Number構(gòu)造函數(shù)時(shí)向其中傳遞相應(yīng)的數(shù)值。

var numberObject = new Number(10);

(2)Number類型也重寫了valueOf()、toLocaleString()和toString()方法。重寫后的valueOf()方法返回對(duì)象表示的基本類型的值,另外兩個(gè)方法則返回字符串形式的數(shù)值。
(3)toFixed()方法會(huì)按照指定的小數(shù)位返回?cái)?shù)值的字符串表示。

var num = 10;
alert(num.toFixed(2)); //"10.00"

如果數(shù)值本身包含的小數(shù)位比指定的還多,那么接近指定的最大小數(shù)位的值就會(huì)被舍入。

var num = 10.005;
alert(num.toFixed(2)); //"10.01"

(4)toExponential()可用于格式化數(shù)值,該方法返回以指數(shù)表示法表示的數(shù)值的字符串形式。toExponential()也接收一個(gè)參數(shù),而且該參數(shù)同樣也是指定輸出結(jié)果的小數(shù)位數(shù)。

var num = 10;
alert(num.toExponential(1)); //"1.0e+1"

(5)toPrecision()方法可能會(huì)返回固定大?。╢ixed)格式,也可能返回指數(shù)(exponential)格式。這個(gè)方法接收一個(gè)參數(shù),即表示數(shù)值的所有數(shù)字的位數(shù)(不包括指數(shù)部分)。

var num = 99;
alert(num.toPrecision(1)); //"1e+2"
alert(num.toPrecision(2)); //"99"
alert(num.toPrecision(3)); //"99.0"

3. String類型
見(jiàn)鏈接描述

5.7 單體內(nèi)置對(duì)象

1. Global對(duì)象
2. Math對(duì)象

5.8 小結(jié)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102461.html

相關(guān)文章

  • JS學(xué)習(xí)筆記4)(變量、作用域和內(nèi)存問(wèn)題)

    摘要:具體來(lái)說(shuō)就是當(dāng)執(zhí)行流進(jìn)入下列任何一個(gè)語(yǔ)句時(shí),作用域鏈就會(huì)得到加長(zhǎng)語(yǔ)句的塊和語(yǔ)句。這兩個(gè)語(yǔ)句都會(huì)在作用域鏈的前端添加一個(gè)變量對(duì)象。對(duì)來(lái)說(shuō),會(huì)將指定的對(duì)象添加到作用域鏈中。 1. 基本類型和引用類型的值 JavaScript變量可以用來(lái)保存兩種類型的值:基本類性值和引用類性值?;绢愋椭翟醋砸韵?種基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number和String?;?..

    linkin 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記6)(創(chuàng)建對(duì)象的7種模式)

    摘要:工廠模式?jīng)]有解決對(duì)象識(shí)別的問(wèn)題即怎樣知道一個(gè)對(duì)象的類型構(gòu)造函數(shù)模式使用構(gòu)造函數(shù)的主要問(wèn)題,就是每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍。創(chuàng)建要返回的對(duì)象可以在這里定義私有變量和函數(shù)添加函數(shù)注意寄生構(gòu)造函數(shù)中是返回對(duì)象注意寄生構(gòu)造函數(shù)中是 1、工廠模式 沒(méi)有解決對(duì)象識(shí)別的問(wèn)題(即怎樣知道一個(gè)對(duì)象的類型) function createPerson(name, age, job) { ...

    Render 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記7)(函數(shù)表達(dá)式)

    摘要:遞歸閉包模仿塊級(jí)作用域私有變量小結(jié)在編程中,使用函數(shù)表達(dá)式可以無(wú)需對(duì)函數(shù)命名,從而實(shí)現(xiàn)動(dòng)態(tài)編程。匿名函數(shù)也稱為拉姆達(dá)函數(shù)。函數(shù)聲明要求有名字,但函數(shù)表達(dá)式不需要。中的函數(shù)表達(dá)式和閉包都是極其有用的特性,利用它們可以實(shí)現(xiàn)很多功能。 1、遞歸 2、閉包 3、模仿塊級(jí)作用域 4、私有變量 5、小結(jié) 在JavaScript編程中,使用函數(shù)表達(dá)式可以無(wú)需對(duì)函數(shù)命名,從而實(shí)現(xiàn)動(dòng)態(tài)編程。匿名函數(shù)也稱...

    xiaokai 評(píng)論0 收藏0
  • JS高級(jí)程序設(shè)計(jì)(4-5)-筆記

    摘要:寫在前面本文記錄的是我不熟悉或者我認(rèn)為值得注意的地方,并不是書(shū)上知識(shí)點(diǎn)的概括第章變量作用域和內(nèi)存問(wèn)題對(duì)象是按引用傳遞的我理解的是傳值其實(shí)傳的是一個(gè)指針,該指針指向內(nèi)存中的某個(gè)對(duì)象。 寫在前面 本文記錄的是我不熟悉或者我認(rèn)為值得注意的地方,并不是書(shū)上知識(shí)點(diǎn)的概括 第4章 變量、作用域和內(nèi)存問(wèn)題 對(duì)象是按引用傳遞的(我理解的是傳值其實(shí)傳的是一個(gè)指針,該指針指向內(nèi)存中的某個(gè)對(duì)象)。舉例如下...

    MycLambert 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記24)(最佳實(shí)踐)

    摘要:大多數(shù)情況下,可以是同局部變量完成相同的事情而不引入新的作用域。選擇正確的方法避免不必要的屬性查找一旦多次用到屬性對(duì)象,應(yīng)該將其存儲(chǔ)在局部變量中。盡可能多的使用局部變量將屬性查找替換為值查找。 1、可維護(hù)性 1.1 可維護(hù)代碼特征 1. 可理解性 2. 直觀性 3. 可適應(yīng)性 4. 可擴(kuò)展性 5. 可調(diào)試性 1.2 代碼約定 1、可讀性(代碼縮進(jìn)和代碼注釋) 2、變量和函數(shù)命名 變量...

    cnTomato 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記6)(面向?qū)ο笾^承——JS繼承的六大方式)

    摘要:除此之外,在超類型的原型中定義的方法,對(duì)子類型而言也是不可兼得,結(jié)果所有類型都只能用構(gòu)造函數(shù)模式。創(chuàng)建對(duì)象增強(qiáng)對(duì)象指定對(duì)象繼承屬性這個(gè)例子的高效率體現(xiàn)在它只調(diào)用了一次構(gòu)造函數(shù)。 1、原型鏈 原型鏈的基本思想是利用原型讓一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法。構(gòu)造函數(shù)、原型和實(shí)例的關(guān)系:每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象;原型對(duì)象都包含著一個(gè)指向構(gòu)造函數(shù)的指針;實(shí)例都包含一個(gè)指向原型對(duì)象的...

    lscho 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

heartFollower

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<