亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

《JavaScript高級(jí)程序設(shè)計(jì)》筆記:引用類型(五)

maybe_009 / 597人閱讀

摘要:元素是通過(guò)指定的分隔符進(jìn)行分隔的。返回值如果從中刪除了元素,則返回的是含有被刪除的元素的數(shù)組。根據(jù)使用的方法不同,這個(gè)函數(shù)執(zhí)行后的返回值可能會(huì)也可能不會(huì)影響訪問(wèn)的返回值。對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回的項(xiàng)組成的數(shù)組。

Object類型

創(chuàng)建object實(shí)例方法有兩種。第一種方法使用new操作符后跟object構(gòu)造函數(shù)。如下:

var person=new Object();
person.name="Nicholas";
person.age=29;

第二種方法使用對(duì)象字面量表示法。如下:

var person={
    name:"Nicholas",
    age:29
}
Array類型 檢測(cè)數(shù)組

使用instanceof操作符:

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

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

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

IE9+及以上,其它主流瀏覽器兼容。

轉(zhuǎn)換方法

toLocaleString()方法
toString()方法
valueOf()方法
join()方法

所有對(duì)象都具有toLocaleString()、toString()、valueOf()方法。其中調(diào)用數(shù)組的toString方法會(huì)返回以數(shù)組中的每個(gè)值的字符串形式拼接而成的一個(gè)以逗號(hào)分割的字符串。
而調(diào)用valueOf()方法返回的還是數(shù)組。

var colors = ["red","blue","green"];
console.log(colors.toString());
console.log(colors.valueOf());
console.log(colors.toLocaleString());

得到的結(jié)果如圖所示:

另外toLocaleString()方法經(jīng)常會(huì)返回跟toString()和valueOf()方法相同的值。但也不是總?cè)绱恕.?dāng)調(diào)用數(shù)組的toLocaleString()方法時(shí),它也會(huì)創(chuàng)建一個(gè)數(shù)組值的以逗號(hào)分割的字符串。而與前兩個(gè)方法唯一不同的是,這一次為了取得每一項(xiàng)的值,調(diào)用的每一項(xiàng)的toLocaleString()方法,而不是toString()方法。如下面例子:

var person1 = {
    toLocaleString: function(){
        return "Nikolaos";
    },
    toString: function(){
        return "Nicholaos";
    }
}
var person2 = {
    toLocaleString: function(){
        return "Grigorios";
    },
    toString: function(){
        return "Greg";
    }
}

var person = [person1,person2];
alert(person); //Nicholaos,Greg
alert(person.toString()); //Nicholaos,Greg
alert(person.toLocaleString());//Nikolaos,Grigorios

說(shuō)明:由于alert()要接收字符串參數(shù),所以它會(huì)在后臺(tái)調(diào)用toString()方法,得到跟直接調(diào)用toString()方法一樣的結(jié)果。

數(shù)組繼承的toLocaleString()、toString()、valueOf()方法,在默認(rèn)情況下都會(huì)以逗號(hào)分割的字符串的形式返回?cái)?shù)組項(xiàng)??梢允褂胘oin()方法,則可以使用不同的分隔符來(lái)構(gòu)建這個(gè)字符串。

join()方法

join() 方法用于把數(shù)組中的所有元素放入一個(gè)字符串。元素是通過(guò)指定的分隔符進(jìn)行分隔的。返回一個(gè)字符串。

var colors = ["red","blue","green"];
console.log(colors.join(",")); //red,blue,green
console.log(colors.join("||")); //red||blue||green
棧方法(后進(jìn)先出)

棧是一種LIFO(Last-In-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu),也就是最新添加的元素最早被移除。

ArrayObj.push()方法
ArrayObj.pop()方法

ArrayObj.push():就是向數(shù)組末尾添加新的元素,返回的是數(shù)組新的長(zhǎng)度。
ArrayObj.pop():就是向數(shù)組中刪除數(shù)組最后一個(gè)元素并且返回該元素。如果數(shù)組為空就返回undefined。

隊(duì)列方法(先進(jìn)先出)

ArrayObj.shift()
ArrayObj.unshift()

ArrayObj.shift():方法用于把數(shù)組中的第一個(gè)元素刪除,并返回第一個(gè)元素的值。
如果數(shù)組是空的,則shift() 方法不進(jìn)行任何操作,返回undefined。請(qǐng)注意,該方法不創(chuàng)建新數(shù)組,而是直接修改原來(lái)的數(shù)組。該方法會(huì)改變數(shù)組的長(zhǎng)度。

ArrayObj.unshift() :該方法可把它的參數(shù)順序添加到數(shù)組的頭部。它直接修改了數(shù)組,而不是創(chuàng)建一個(gè)新的數(shù)組。返回的是新數(shù)組的長(zhǎng)度。

unshift()在IE6,IE7下,數(shù)據(jù)有添加成功,但返回值卻是undefined。

重排序方法

reverse()方法
sort()方法

reverse()方法會(huì)對(duì)反轉(zhuǎn)數(shù)組項(xiàng)的順序。

var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values);  //5,4,3,2,1

這里數(shù)組的初始值及順序是1、2、3、4、5。而調(diào)用數(shù)組的reverse()方法后,其值的順序變成了5、4、3、2、1。

sort()方法按升序排列數(shù)組——即最小的值位于最前面,最大的值排在最后面。為了實(shí)現(xiàn)排序,sort()方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法,然后比較得到字符串,以確定如何排序。即使數(shù)組中的每一項(xiàng)都是數(shù)組,sort()方法比較的也是字符串,如下所示:

var values = [0, 1, 5, 10, 15];
values.sort();
alert(values);  //0,1,10,15,5

這種排序方式在很多情況下都不是最佳方案。因此sort()方法可以接受一個(gè)比較函數(shù)作為參數(shù),以便我們指定那個(gè)值位于那個(gè)值的前面。

比較函數(shù)接受兩個(gè)參數(shù),如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等,則返回0,如果第一個(gè)參數(shù)位于第二個(gè)之后則返回一個(gè)正數(shù)。以下就是一個(gè)簡(jiǎn)單的比較函數(shù):

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

這個(gè)比較函數(shù)可以使用于大多數(shù)數(shù)據(jù)類型,只要將其作為參數(shù)傳遞給sort()方法即可,如下面這個(gè)例子所示:

var values = [0, 1, 2, 5, 10, 15];
values.sort(compare);
alert(values);  //0,1,5,10,15

在將比較函數(shù)傳遞到sort()方法之后,數(shù)值仍然保持了正確的升序。當(dāng)然,也可以通過(guò)比較函數(shù)產(chǎn)生降序排序的結(jié)果,只要交換比較函數(shù)返回的值即可:

function compare(value1, value2) {
   if (value1 < value2) {
       return 1;
   } else if (value1 > value2) {
       return -1;
   } else {
       return 0;
   }
}
var values = [0, 1, 2, 5, 10, 15];
values.sort(compare);
alert(values);  //15,10,5,1,0

reverse()和sort()方法會(huì)返回值是經(jīng)過(guò)排序之后的數(shù)組。

對(duì)于數(shù)值類型或者其valueOf方法會(huì)返回?cái)?shù)值類型的對(duì)象類型,可以使用一個(gè)更簡(jiǎn)單的比較函數(shù)。這個(gè)函數(shù)只要用第二個(gè)值減第一個(gè)值即可:

function compare(value1, value2) {
   return value2 - value1;
}

由于比較函數(shù)通過(guò)返回一個(gè)小于零、等于零或大于零的值來(lái)影響排序結(jié)果,因此減法操作就可以適當(dāng)處理所有情況。

操作方法

concat()方法
slice()方法
splice()方法

concat() 方法用于連接兩個(gè)或多個(gè)數(shù)組。
該方法不會(huì)改變現(xiàn)有的數(shù)組,而僅僅會(huì)返回被連接數(shù)組的一個(gè)副本。

輸出的結(jié)果:1,2,3,4,5

簡(jiǎn)介slice()與splice()方法

slice(start,end)方法

start 必需。規(guī)定從何處開始選取。如果是負(fù)數(shù),那么它規(guī)定從數(shù)組尾部開始算起的位置。也就是說(shuō),-1 指最后一個(gè)元素,-2 指倒數(shù)第二個(gè)元素,以此類推。

end 可選。規(guī)定從何處結(jié)束選取。該參數(shù)是數(shù)組片斷結(jié)束處的數(shù)組下標(biāo)。如果沒(méi)有指定該參數(shù),那么切分的數(shù)組包含從 start 到數(shù)組結(jié)束的所有元素。如果這個(gè)參數(shù)是負(fù)數(shù),那么它規(guī)定的是從數(shù)組尾部開始算起的元素。

返回值:返回一個(gè)新的數(shù)組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。

splice() 方法用于插入、刪除或替換數(shù)組的元素
語(yǔ)法:arrayObject.splice(index,howmany,element1,.....,elementX)

index 必需。規(guī)定從何處添加/刪除元素。
該參數(shù)是開始插入和(或)刪除的數(shù)組元素的下標(biāo),必須是數(shù)字。

howmany 必需。規(guī)定應(yīng)該刪除多少元素。必須是數(shù)字,但可以是 "0"。
如果未規(guī)定此參數(shù),則刪除從 index 開始到原數(shù)組結(jié)尾的所有元素。

element1 可選。規(guī)定要添加到數(shù)組的新元素。從 index 所指的下標(biāo)處開始插入。
elementX 可選??上驍?shù)組添加若干元素。

返回值:如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數(shù)組。

說(shuō)明:splice() 方法可刪除從 index 處開始的零個(gè)或多個(gè)元素,并且用參數(shù)列表中聲明的一個(gè)或多個(gè)值來(lái)替換那些被刪除的元素。

下面簡(jiǎn)要概括一下slice()與splice()方法

slice(start, end); slice()方法返回從參數(shù)指定位置開始到當(dāng)前數(shù)組末尾的所有項(xiàng)。如果有兩個(gè)參數(shù),該方法返回起死和結(jié)束位置之間的項(xiàng),但不包括結(jié)束位置的項(xiàng)。

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

console.log(colors2); // green, blue, yellow, purple
console.log(colors3); // green, blue, yellow

splice()有刪除,插入,替換的功能

刪除 - 需要兩個(gè)參數(shù),要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。

var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1);
console.log(colors); // greeen, blue
console.log(removed); // red

插入 - 需要三個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù))和要插入的項(xiàng)

var colors = ["red", "green", "blue"];
var removed = colors.splice(1,0,"yellow", "orange");
console.log(colors); // ["red", "yellow", "orange", "green", "blue"]
console.log(removed); // 返回空

替換 - 需要三個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)。

var colors = ["red", "green", "blue"];
var removed = colors.splice(1,1,"yellow", "orange");
console.log(colors);  // ["red", "yellow", "orange", "blue"]
console.log(removed); // ["green"]
位置方法

indexOf()方法
lastIndexOf()方法

ECMAScript5為數(shù)組實(shí)例添加了兩個(gè)位置方法:indexOf()lastIndexOf()。這兩個(gè)方法都接收兩個(gè)參數(shù):要查找的項(xiàng)和(可選的)表示查找起點(diǎn)位置的索引。其中indexOf()方法從數(shù)組開頭(位置0)開始向后查找,lastIndexOf()方法則從數(shù)組的末尾開始向前查找。

這兩個(gè)方法都返回查找的項(xiàng)在數(shù)組中的位置,或者沒(méi)有查找到的情況下返回-1。在比較第一個(gè)參數(shù)與數(shù)組中的每一項(xiàng)時(shí),會(huì)使用全等操作符;也就是說(shuō)要求查找的項(xiàng)必須嚴(yán)格相等(就像使用===一樣)。

var numbers = [1,2,3,4,5,4,3,2,1];
console.log(numbers.indexOf(4));//3
console.log(numbers.lastIndexOf(4));//5
console.log(numbers.indexOf(4,4)); //5
console.log(numbers.lastIndexOf(4,4));//3
var person = {name:"Niccholas"};
var people = [{name:"Niccholas"}];
var morePeople = [person];
console.log(people.indexOf(person));//-1
console.log(morePeople.indexOf(person)); //0

支持的瀏覽器IE9+,F(xiàn)ireFox2+,Safari3+,Opera9.5+和Chrome。

迭代方法

ECMAScript5為數(shù)組定義了5個(gè)迭代方法。每個(gè)方法都接收兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和(可選的)運(yùn)行該函數(shù)的作用域?qū)ο蟆绊憈his的值。傳入這些方法的函數(shù)會(huì)接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對(duì)象本身。根據(jù)使用的方法不同,這個(gè)函數(shù)執(zhí)行后的返回值可能會(huì)也可能不會(huì)影響訪問(wèn)的返回值。

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ù),這個(gè)方法沒(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。

以上方法都不會(huì)修改數(shù)組中的包含的值。

在這些方法中最相似的是every()`some(),他們都用于查詢數(shù)組中的某一項(xiàng)是否滿足某個(gè)條件。

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

var someResult = numbers.some(function(item,index,array){
    return (item > 2);
});
console.log(someResult); //true

filter():

var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,array){
    return (item > 2);
});
console.log(filterResult); //[3, 4, 5, 4, 3]

map():

var numbers = [1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item,index,array){
    return (item * 2);
});
console.log(mapResult);  //[2, 4, 6, 8, 10, 8, 6, 4, 2]

forEach():這個(gè)方法沒(méi)有返回值,本質(zhì)上和使用for循環(huán)迭代數(shù)組一樣。

支持的瀏覽器IE9+,F(xiàn)ireFox2+,Safari3+,Opera9.5+和Chrome。

縮小方法

ECMAScript5還新增了兩個(gè)縮小數(shù)組的方法。reduce()reduceRight()方法。這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。其中reduce()方法從數(shù)組中的第一項(xiàng)開始,逐個(gè)遍歷到最后。而reduceRight()則從數(shù)組的最后一項(xiàng)開始,向前遍歷到第一項(xiàng)。

這兩個(gè)方法都接收兩個(gè)參數(shù):一個(gè)在每一項(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)。第一次迭代放生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)。

使用reduce()方法可以執(zhí)行求數(shù)組中所有值之和的操作,比如:

var values = [1,2,3,4,5];
var sum = values.reduce(function(pre,cur,index,array){
    return pre + cur;
});
console.log(sum); //15

reduceRight()方法相似,只是方法想法而已。

支持的瀏覽器IE9+,F(xiàn)ireFox2+,Safari3+,Opera9.5+和Chrome。

Date類型

要?jiǎng)?chuàng)建一個(gè)日期對(duì)象,使用new操作符和Date構(gòu)造函數(shù)即可:

var now = new Date();

Date.parse()方法

其中Date.parse()方法接收一個(gè)表示日期的字符串參數(shù),然后嘗試根據(jù)這個(gè)字符串返回相應(yīng)日期的毫秒數(shù)。ECMA-262沒(méi)有定義Date.parse()應(yīng)該支持哪種日期格式,因此這個(gè)方法的行為因?qū)崿F(xiàn)而異,而且通常是因地區(qū)而異。將地區(qū)設(shè)置為美國(guó)的瀏覽器通常都接受下列日期格式:

"月/日/年",如6/13/2004;

"英文月名 日,年",如May 12,2004;

"英文星期幾 英文月名 日 年 時(shí):分:秒 時(shí)區(qū)",如Tue May 25 2004 00:00:00 GMT+0800。

ISO 8601擴(kuò)展格式Y(jié)YYY-MM-DDTHH:mm:ss:sssZ(例如 2004-05-25T00::00:00)。只有兼容ECMAScript5的實(shí)現(xiàn)支持這種格式。

例如,要為2004年5月25日創(chuàng)建一個(gè)日期對(duì)象,可以使用下面的代碼:

//Tue May 25 2004 00:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
var someDate = new Date(Date.parse("May 25,2004"));

如果傳入Data.parse()的方法的字符串 不能表示日期格式,會(huì)返回NAN。實(shí)際上,如果直接將表示日期的字符串傳遞給Date構(gòu)造函數(shù),也會(huì)在后臺(tái)調(diào)用Date.parse()方法,例如下面的代碼跟前面的是等價(jià)的。

//Tue May 25 2004 00:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
var someDate = new Date("May 25,2004"); 

這行代碼將會(huì)得到與前面一行相同的日期對(duì)象。

Date.UTC()方法

Date.UTC()同樣返回日期的毫秒數(shù)。但它與Date.parse()在構(gòu)建值時(shí)使用的是不同的信息。Date.UTC()的參數(shù)分別表示年份、基于0的月數(shù)(一月是0,二月是1,依次類推)、月中的哪一天(1到31)、小時(shí)數(shù)(0到23)、分鐘、秒、毫秒數(shù)。在這些參數(shù)中只有前兩個(gè)參數(shù)是必須的(年和月)。如果沒(méi)有提供月中的天數(shù),則假設(shè)天數(shù)為1;如果省略其它參數(shù),則統(tǒng)統(tǒng)假設(shè)為0,如下例子:

//GMT時(shí)間2000年1月1日午夜零時(shí)
var y2k = new Date(Date.UTC(2000,0));
console.log(y2k); //Sat Jan 01 2000 08:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)

//GMT時(shí)間2005年5月5日下午5:55:55
var allFives = new Date(Date.UTC(2005,4,5,17,55,55));
console.log(allFives);//Fri May 06 2005 01:55:55 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)

說(shuō)明下:Greenwich Mean Time (GMT)格林尼治標(biāo)準(zhǔn)時(shí)間英國(guó)、愛(ài)爾蘭、冰島和葡萄牙屬于該時(shí)區(qū)。這個(gè)時(shí)區(qū)與中國(guó)北京時(shí)間的時(shí)差是8個(gè)小時(shí),也就是說(shuō)比北京時(shí)間晚8個(gè)小時(shí)。

Date構(gòu)造函數(shù)
Date構(gòu)造函數(shù)會(huì)模仿Date.UTC(),但有一點(diǎn) 不同的是,日期和時(shí)間都是基于本地時(shí)區(qū)而非GMT來(lái)創(chuàng)建。不過(guò)他們的參數(shù)跟Date.UTC()的參數(shù)一樣。
例如:

//本地時(shí)間2000年1月1日午夜零時(shí)
var y2k = new Date(2000,0);
console.log(y2k); //Sat Jan 01 2000 00:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)

//本地時(shí)間2005年5月5日下午5:55:55
var allFives = new Date(2005,4,5,17,55,55);
console.log(allFives);//Thu May 05 2005 17:55:55 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)

Date.now()方法
ES5添加了Date.now()方法,返回表示這個(gè)方法時(shí)的日期和時(shí)間的毫秒數(shù)。這個(gè)方法簡(jiǎn)化了使用Date對(duì)象分析代碼的工作,例如:

//取得開始時(shí)間
var start = Date.now();

//調(diào)用函數(shù)
dosomething();

//取得結(jié)束時(shí)間
var stop = Date.now(),
    result = stop - start;
console.log(start,stop,result); //1494292306763 1494292306768 5

function dosomething(){
    console.log("打印結(jié)果");
}

支持Date.now()方法的瀏覽器包括IE9+,F(xiàn)ireFox3+,Safari3+,Opera10.5+和Chrome。在不支持的其它瀏覽器,使用+操作符把Date對(duì)象轉(zhuǎn)成字符串,也可以達(dá)到相同的目的。

//取得開始時(shí)間
var start = +new Date();

//調(diào)用函數(shù)
dosomething();

//取得結(jié)束時(shí)間
var stop = +new Date(),
    result = stop - start;
console.log(start,stop,result); //1494292306763 1494292306768 5

function dosomething(){
    console.log("打印結(jié)果");
}
繼承的方法

與其它引用類型一樣,Date類型也重寫了toLocaleString()、toString()valueOf()方法。

其中toLocaleString()、toString()在顯示日期和時(shí)間沒(méi)有什么價(jià)值;而valueOf()方法不是返回的字符串,而是返回日期的毫秒表示。因此可以方便使用比較操作符(大于或小于)來(lái)比較日期值。如下面的例子:

var date1 = new Date(2007,0,1);
var date2 = new Date(2007,1,1);
console.log(date1 < date2); //true
console.log(date1 > date2); //false
日期格式化方法

Date類型還有一些專門用于將日期格式化為字符串的方法,如下:

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

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

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

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

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

與toLocaleString()和toString()方法一樣,以上這些字符串格式的方法輸出也是因?yàn)g覽器而異的。因此沒(méi)有哪一個(gè)方法能夠用來(lái)在用戶界面上顯示一致的日期信息。

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

Date() 返回當(dāng)日的日期和時(shí)間。
getDate() 從 Date 對(duì)象返回一個(gè)月中的某一天 (1 ~ 31)。
getDay() 從 Date 對(duì)象返回一周中的某一天 (0 ~ 6)。
getMonth() 從 Date 對(duì)象返回月份 (0 ~ 11)。
getFullYear() 從 Date 對(duì)象以四位數(shù)字返回年份。
getYear() 請(qǐng)使用 getFullYear() 方法代替。
getHours() 返回 Date 對(duì)象的小時(shí) (0 ~ 23)。
getMinutes() 返回 Date 對(duì)象的分鐘 (0 ~ 59)。
getSeconds() 返回 Date 對(duì)象的秒數(shù) (0 ~ 59)。
getMilliseconds() 返回 Date 對(duì)象的毫秒(0 ~ 999)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒數(shù)。
getTimezoneOffset() 返回本地時(shí)間與格林威治標(biāo)準(zhǔn)時(shí)間 (GMT) 的分鐘差。
getUTCDate() 根據(jù)世界時(shí)從 Date 對(duì)象返回月中的一天 (1 ~ 31)。
getUTCDay() 根據(jù)世界時(shí)從 Date 對(duì)象返回周中的一天 (0 ~ 6)。
getUTCMonth() 根據(jù)世界時(shí)從 Date 對(duì)象返回月份 (0 ~ 11)。
getUTCFullYear() 根據(jù)世界時(shí)從 Date 對(duì)象返回四位數(shù)的年份。
getUTCHours() 根據(jù)世界時(shí)返回 Date 對(duì)象的小時(shí) (0 ~ 23)。
getUTCMinutes() 根據(jù)世界時(shí)返回 Date 對(duì)象的分鐘 (0 ~ 59)。
getUTCSeconds() 根據(jù)世界時(shí)返回 Date 對(duì)象的秒鐘 (0 ~ 59)。
getUTCMilliseconds() 根據(jù)世界時(shí)返回 Date 對(duì)象的毫秒(0 ~ 999)。
setDate() 設(shè)置 Date 對(duì)象中月的某一天 (1 ~ 31)。
setMonth() 設(shè)置 Date 對(duì)象中月份 (0 ~ 11)。
setFullYear() 設(shè)置 Date 對(duì)象中的年份(四位數(shù)字)。
setYear() 請(qǐng)使用 setFullYear() 方法代替。
setHours() 設(shè)置 Date 對(duì)象中的小時(shí) (0 ~ 23)。
setMinutes() 設(shè)置 Date 對(duì)象中的分鐘 (0 ~ 59)。
setSeconds() 設(shè)置 Date 對(duì)象中的秒鐘 (0 ~ 59)。
setMilliseconds() 設(shè)置 Date 對(duì)象中的毫秒 (0 ~ 999)。
setTime() 以毫秒設(shè)置 Date 對(duì)象。
setUTCDate() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中月份的一天 (1 ~ 31)。
setUTCMonth() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的月份 (0 ~ 11)。
setUTCFullYear() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的年份(四位數(shù)字)。
setUTCHours() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的小時(shí) (0 ~ 23)。
setUTCMinutes() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的分鐘 (0 ~ 59)。
setUTCSeconds() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的秒鐘 (0 ~ 59)。
setUTCMilliseconds() 根據(jù)世界時(shí)設(shè)置 Date 對(duì)象中的毫秒 (0 ~ 999)。

RegExp類型

ECMAScript通過(guò)RegExp類型支持正則表達(dá)式,如下:

var expression = /pattern/flags;

其中的模式(pattern)部分可以是任何簡(jiǎn)單或者復(fù)雜的正則表達(dá)式,可以包含字符類、限定符、分組、向前查找以及反向引用。每個(gè)正則表達(dá)式可帶有一個(gè)或者多個(gè)標(biāo)注(flags),用以標(biāo)明正則表達(dá)式的行為。有三個(gè)以下標(biāo)志:

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

i:表示不區(qū)分大小寫模式。

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

以字面量的形式來(lái)定義正則表達(dá)式

例如:匹配第一個(gè)bat或者cat,不區(qū)分大小寫

var pattern = /[bc]at/i;

使用RegExp構(gòu)造函數(shù)
它接收兩個(gè)參數(shù):一個(gè)是要匹配的字符串模式,另一個(gè)是可選的標(biāo)志字符串。可以使用字面量定義的任何表達(dá)式,都可以使用構(gòu)造函數(shù)來(lái)定義,還是以上面的例子為例:

var pattern = new RegExp("[bc]at","i");

注意:RegExp構(gòu)造函數(shù)模式參數(shù)時(shí)字符串,所以再某些情況下要對(duì)字符進(jìn)項(xiàng)雙重轉(zhuǎn)義。所有元字符都必須雙重轉(zhuǎn)義,如字面量模式為/[bc]at/,那么等價(jià)的字符串為"/[bc]at/"

例子:

var re = null,
    i;
    for(i=0; i < 10; i++){
        re = /cat/g;
        console.log(re.test("catastrophe"));
    }
    for(i=0; i < 10; i++){
        re = new RegExp("cat","g");
        console.log(re.test("catastrophe"));
    }

打印結(jié)果都為10個(gè)true

RegExp實(shí)例方法

exec - exec接收一個(gè)參數(shù),即要應(yīng)用模式的字符串,然后返回包含第一個(gè)匹配信息的數(shù)組。

var text = "cat, bat, sat, fat";
var pattern1 = /.at/;

var matches = pattern1.exec(text);
console.log(matches); // ["cat"]

match - match是字符串執(zhí)行匹配正則表達(dá)式規(guī)則的方法,他的參數(shù)是正則表達(dá)

var text = "cat, bat, sat, fat";
var pattern1 = /.at/;

var matches2 = text.match(pattern1);
console.log(matches2); // ["cat"]

test - test()接收一個(gè)字符串參數(shù)

var text = "000-00-0000";
var pattern = /d{3}-d{2}-d{4}/;

if (pattern.test(text)){
    console.log("The pattern was matched"); // The pattern was matched
}

詳細(xì)解釋可查看《js學(xué)習(xí)筆記 - 正則表達(dá)式詳解》

Function類型

由于函數(shù)名僅僅是指向函數(shù)的指針。因此函數(shù)名與包含對(duì)象指針的其它變量沒(méi)有什么不同。換句話說(shuō),一個(gè)函數(shù)可能有多個(gè)名字,如下例子:

function sum(num1,num2){
return num1 + num2;
}
console.log(sum(10,10)); //20

var anotherSum = sum;
console.log(anotherSum(10,10)); //20

sum = null;
console.log(anotherSum(10,10)); //20

注意:使用不帶圓括號(hào)的函數(shù)名是訪問(wèn)函數(shù)指針,而非調(diào)用函數(shù)。

沒(méi)有重載(深入理解) 函數(shù)聲明與函數(shù)表達(dá)式 作為值的函數(shù) 函數(shù)內(nèi)部屬性

在函數(shù)內(nèi)部有兩個(gè)特殊的對(duì)象:argumentsthis。
arguments轉(zhuǎn)為數(shù)組

(function() {
    var slice = Array.prototype.slice,
        aArguments = slice.apply(arguments);

        console.log(aArguments);
})(10, 20, 30);

arguments.callee

該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。當(dāng)函數(shù)在嚴(yán)格模式下運(yùn)行時(shí),訪問(wèn)arguments.callee會(huì)導(dǎo)致錯(cuò)誤。

this

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

function sayColor(){
    console.log(this.color);
}

sayColor(); // red

sayColor.call(this); // red
sayColor.call(window); // red
sayColor.call(o); // blue
函數(shù)屬性和方法

length

length屬性表示函數(shù)希望接收的命名參數(shù)的個(gè)數(shù)。

function sayName(name){
    alert(name);
}

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

function sayHi(){
    alert("hi");
}

console.log(sayName.length); //1
console.log(sum.length); //2
console.log(sayHi.length); //0

prototype

在es5中prototype屬性是不可枚舉的,因此使用for-in無(wú)法發(fā)現(xiàn)。

每個(gè)函數(shù)都包含兩個(gè)非繼承而來(lái)的方法:call()apply()。他們的區(qū)別在于接收的參數(shù)方式不同。

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

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

function callSum2(num1, num2){
    return sum.apply(this, [num1, num2]); 
}

console.log(callSum1(10,10)); // 20
console.log(callSum2(10,10)); //20

傳遞參數(shù)并非apply()和call()的用武之地,它們的強(qiáng)大之處在于擴(kuò)充函數(shù)的作用域,如下例子:

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

function sayColor(){
console.log(this.color);
}

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

es5還定義了一個(gè)方法:bind()方法,這個(gè)方法會(huì)創(chuàng)建一個(gè)函數(shù)的實(shí)例,其中this會(huì)被綁定到傳給bind()函數(shù)的值。

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

function sayColor(){
console.log(this.color);
}

var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue

sayColor調(diào)用bind()并傳入o對(duì)象,創(chuàng)建了objectSayColor()函數(shù),objectSayColor()函數(shù)的this值等于o。

因此即使是在全局作用域中調(diào)用這個(gè)函數(shù),結(jié)果也是blue。

基本包裝類型
var value = "25";
var number = Number(value);
console.log(typeof number);
console.log(number instanceof Number);// false

var obj = new Number(value);
console.log(typeof obj);
console.log(obj instanceof Number);// true
Boolean類型
var falseObject = new Boolean(false);
var result = falseObject && true; // true  

//布爾表達(dá)式中的所有對(duì)象都會(huì)被轉(zhuǎn)換為true, 因此falseObject對(duì)象在布爾表達(dá)式中代表的是true

console.log(result); // true

var falseValue = false;
result = falseValue && true;
console.log(result); //false

console.log(typeof falseObject); //object
console.log(typeof falseValue); // Boolean
console.log(falseObject instanceof Boolean); //true
console.log(falseValue instanceof Boolean); // false
Number類型
var numberObject = new Number(10);
var numberValue = 10;
console.log(typeof numberObject); // Object
console.log(typoef numberValue); // number
console.log(numberObject instanceof Number); // true
console.log(numberValue instanceof Number); // false
String類型 字符方法

charAt() charCodeAt()

charAt()方法以單字符字符串的形式返回給定位置的那個(gè)字符串。

charCodeAt()返回的是字符編碼。

var stringValue = "hello world";
console.log(stringValue.charAt(1)); // e
console.log(stringValue.charCodeAt(1)); // 101
字符串操作方法

concat()

concat()用于將一或多個(gè)字符串拼接起來(lái)。

var stringValue = "hello ";
var result = stringValue.concat("world");
console.log(result); // hello world
console.log(stringValue); // hello

slice(start, end)
end 表示字符串到哪里結(jié)束。
如果傳入的是負(fù)數(shù),slice()方法會(huì)將傳入的負(fù)值與字符串長(zhǎng)度相加。

var str="Hello happy world!";
console.log(str.slice(6)); // happy world!
console.log(str.slice(6,11));// happy
console.log(str.slice(-3)); // ld!
console.log(str.slice(3, -4)); //lo happy wo 

substring(start, end)
如果傳入的是負(fù)數(shù), substring()會(huì)把所有字符參數(shù)都轉(zhuǎn)換為0

var str="Hello happy world!";
console.log(str.substring(6)); // happy world!
console.log(str.substring(6,11));// happy
console.log(str.substring(-3)); // Hello happy world!
console.log(str.substring(3, -4)); //Hel

substr(start, length)
如果傳入的是負(fù)數(shù),substr()方法將負(fù)的第一個(gè)參數(shù)加上字符串的長(zhǎng)度,而將負(fù)的第二個(gè)參數(shù)轉(zhuǎn)換為0

var str="Hello world!";
console.log(str.substr(3)); //lo world!
console.log(str.substr(3, 7)); //lo worl
console.log(str.substr(-3)); // ld!
console.log(str.substr(3, -3)); // 空字符串
字符串位置方法

indexOf() lastIndexOf()

var stringValue = "hello world";
console.log(stringValue.indexOf("o")); // 4
console.log(stringValue.lastIndexOf("o")); //7

這兩個(gè)方法都可以接收可選的第二個(gè)參數(shù),表示從字符串中的哪個(gè)位置開始搜索。

var stringValue = "hello world";
console.log(stringValue.indexOf("o", 6)); // 7
console.log(stringValue.lastIndexOf("o", 6)); //4
字符串的模式匹配方法

match()

var text = "cat, bat, sat, fat";
var pattern = /.at/;

var matches = text.match(pattern);
console.log(matches.index); //0
console.log(matches[0]); // cat
console.log(pattern.lastIndex); //0

search()

var text = "cat, bat, sat, fat";
var pos = text.search(/at/);
console.log(pos); // 1

replace()

var text = "cat, bat, sat, fat";
var result = text.replace("at", "ond");
console.log(result); // cond, bat, sat, fat

var result = text.replace(/at/g, "ond");
console.log(result); // cond, bond, sond, fond
單體內(nèi)置對(duì)象 Global對(duì)象

URI編碼方法
Global對(duì)象的encodeURI()和encodeURIComponent()方法可以對(duì)URI(Uniform Resources Identifiers,通用資源標(biāo)識(shí)符)進(jìn)行編碼,以便發(fā)送給瀏覽器。

var url = "http://www.baidu.com/";
console.log(encodeURI(url));
console.log(encodeURIComponent(url));

encodeURI()和encodeURIComponent()方法對(duì)象的兩個(gè)方法分別是decodeURI()和decodeURIComponent()

Math對(duì)象

random()方法

Math.random()方法返回介于0和1之間一個(gè)隨機(jī)數(shù),不包含0和1。對(duì)于某些站點(diǎn)來(lái)說(shuō),這個(gè)方法非常實(shí)用,因?yàn)榭梢岳盟鼇?lái)隨機(jī)顯示一些名言和新聞事件。套用下面的公式,就可以利用Math.random()從某個(gè)整數(shù)范圍內(nèi)隨機(jī)選擇一個(gè)值。

值=Math.floor(Math.random()*可能值的總數(shù)+第一個(gè)可能的值)

例如:如果想選擇一個(gè)1到10之間的數(shù)值,可以像下面這邊編寫代碼:

var num = Math.floor(Math.random()*10+1);

function selectFrom(lowerValue,upperValue){
    var choice = upperValue - lowerValue + 1;
    return Math.floor(Math.random()*choice+lowerValue);
}

var num = selectFrom(2,10);
console.log(num);

var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
var color = colors[selectFrom(0, colors.length-1)];
console.log(color);

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

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

相關(guān)文章

  • javascript高級(jí)程序設(shè)計(jì)》第六章 讀書筆記javascript對(duì)象的幾種創(chuàng)建方式

    摘要:三種使用構(gòu)造函數(shù)創(chuàng)建對(duì)象的方法和的作用都是在某個(gè)特殊對(duì)象的作用域中調(diào)用函數(shù)。這種方式還支持向構(gòu)造函數(shù)傳遞參數(shù)。叫法上把函數(shù)叫做構(gòu)造函數(shù),其他無(wú)區(qū)別適用情境可以在特殊的情況下用來(lái)為對(duì)象創(chuàng)建構(gòu)造函數(shù)。 一、工廠模式 工廠模式:使用字面量和object構(gòu)造函數(shù)會(huì)有很多重復(fù)代碼,在此基礎(chǔ)上改進(jìn)showImg(https://segmentfault.com/img/bVbmKxb?w=456&...

    xiaotianyi 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)》第六章 讀書筆記javascript繼承的6種方法

    摘要:繼承的是超類型中構(gòu)造函數(shù)中的屬性,如上繼承了屬性,但沒(méi)有繼承原型中的方法。上述造成的結(jié)果是子類型實(shí)例中有兩組超類型的構(gòu)造函數(shù)中定義的屬性,一組在子類型的實(shí)例中,一組在子類型實(shí)例的原型中。 ECMAScript只支持實(shí)現(xiàn)繼承,主要依靠原型鏈來(lái)實(shí)現(xiàn)。與實(shí)現(xiàn)繼承對(duì)應(yīng)的是接口繼承,由于script中函數(shù)沒(méi)有簽名,所以無(wú)法實(shí)現(xiàn)接口繼承。 一、原型鏈 基本思想:利用原型讓一個(gè)引用類型繼承另一個(gè)引用...

    孫吉亮 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)筆記:內(nèi)存與執(zhí)行環(huán)境

    摘要:因此,所有在方法中定義的變量都是放在棧內(nèi)存中的當(dāng)我們?cè)诔绦蛑袆?chuàng)建一個(gè)對(duì)象時(shí),這個(gè)對(duì)象將被保存到運(yùn)行時(shí)數(shù)據(jù)區(qū)中,以便反復(fù)利用因?yàn)閷?duì)象的創(chuàng)建成本通常較大,這個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū)就是堆內(nèi)存。 上一篇:《javascript高級(jí)程序設(shè)計(jì)》筆記:繼承近幾篇博客都會(huì)圍繞著圖中的知識(shí)點(diǎn)展開 showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...

    fuyi501 評(píng)論0 收藏0
  • JavaScript高級(jí)程序設(shè)計(jì)筆記:變量、作用域、內(nèi)存問(wèn)題

    摘要:作用域鏈中的下一個(gè)變量對(duì)象來(lái)自包含外部環(huán)境,而再下一個(gè)變量對(duì)象則來(lái)自下一個(gè)包含環(huán)境。這樣,一直延續(xù)到全局執(zhí)行環(huán)境全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈中的最后一個(gè)對(duì)象標(biāo)識(shí)符解析沿作用域鏈一級(jí)一級(jí)搜索標(biāo)識(shí)符。 一、寫在前面 最近研究了創(chuàng)建Android虛擬機(jī)、vscode結(jié)合weex開發(fā)Android APP、Vmware裝MAC虛擬機(jī)的事,看的內(nèi)容不夠多,接下來(lái)加油 二、變量、作用域和...

    U2FsdGVkX1x 評(píng)論0 收藏0
  • 讀書筆記(02) - 可維護(hù)性 - JavaScript高級(jí)程序設(shè)計(jì)

    摘要:解耦優(yōu)勢(shì)代碼復(fù)用,單元測(cè)試。常用比較誤區(qū)可同時(shí)判斷,可用來(lái)判斷對(duì)象屬性是否存在。使用作判斷無(wú)法進(jìn)行充分的類型檢查。文件中應(yīng)用常量參考文檔高級(jí)程序設(shè)計(jì)作者以樂(lè)之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVburXw?w=500&h=400); 編寫可維護(hù)性代碼 可維護(hù)的代碼遵循原則: 可理解性 (方便他人理解) 直觀...

    k00baa 評(píng)論0 收藏0
  • 《你不知道的javascript筆記_對(duì)象&原型

    摘要:上一篇你不知道的筆記寫在前面這是年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響年是向上的一年在新的城市穩(wěn)定連續(xù)堅(jiān)持健身三個(gè)月早睡早起游戲時(shí)間大大縮減,學(xué)會(huì)生活。 上一篇:《你不知道的javascript》筆記_this 寫在前面 這是2019年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響2018年是向上的一年:在新的城市穩(wěn)定、...

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

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

0條評(píng)論

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