国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Array.prototype

2019-11-06 09:58:36
字體:
供稿:網(wǎng)友

所有的數(shù)組實(shí)例都繼承于 Array.PRototype。

所有的數(shù)組方法都定義在 Array.prototype 身上, 和其他的構(gòu)造函數(shù)一樣,你可以通過擴(kuò)展 Array 的 prototype 屬性上的方法來給所有數(shù)組實(shí)例增加方法。

Array.prototype 本身也是個(gè)數(shù)組。Array.isArray(Array.prototype); // true

屬性

Array.prototype.constructor所有的數(shù)組實(shí)例都繼承了這個(gè)屬性,它的值就是 Array,表明了所有的數(shù)組都是由 Array 構(gòu)造出來的。Array.prototype.length上面說了,因?yàn)?Array.prototype 也是個(gè)數(shù)組,所以它也有 length 屬性,這個(gè)值為 0,因?yàn)樗莻€(gè)空數(shù)組。

方法

會改變自身的方法

下面的這些方法會改變調(diào)用它們的對象自身的值:

Array.prototype.copyWithin()在數(shù)組內(nèi)部,將一段元素序列拷貝到另一段元素序列上,覆蓋原有的值。Array.prototype.fill()將數(shù)組中指定區(qū)間的所有元素的值,都替換成某個(gè)固定的值。Array.prototype.pop()刪除數(shù)組的最后一個(gè)元素,并返回這個(gè)元素。Array.prototype.push()在數(shù)組的末尾增加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長度。Array.prototype.reverse()顛倒數(shù)組中元素的排列順序,即原先的第一個(gè)變?yōu)樽詈笠粋€(gè),原先的最后一個(gè)變?yōu)榈谝粋€(gè)。Array.prototype.shift()刪除數(shù)組的第一個(gè)元素,并返回這個(gè)元素。Array.prototype.sort()對數(shù)組元素進(jìn)行排序,并返回當(dāng)前數(shù)組。Array.prototype.splice()在任意的位置給數(shù)組添加或刪除任意個(gè)元素。Array.prototype.unshift()在數(shù)組的開頭增加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長度。

不會改變自身的方法

下面的這些方法絕對不會改變調(diào)用它們的對象的值,只會返回一個(gè)新的數(shù)組或者返回一個(gè)其它的期望值。

Array.prototype.concat()返回一個(gè)由當(dāng)前數(shù)組和其它若干個(gè)數(shù)組或者若干個(gè)非數(shù)組值組合而成的新數(shù)組。Array.prototype.includes()判斷當(dāng)前數(shù)組是否包含某指定的值,如果是返回 true,否則返回 false。Array.prototype.join()連接所有數(shù)組元素組成一個(gè)字符串。Array.prototype.slice()抽取當(dāng)前數(shù)組中的一段元素組合成一個(gè)新數(shù)組。Array.prototype.toSource()返回一個(gè)表示當(dāng)前數(shù)組字面量的字符串。遮蔽了原型鏈上的 Object.prototype.toSource() 方法。Array.prototype.toString()返回一個(gè)由所有數(shù)組元素組合而成的字符串。遮蔽了原型鏈上的 Object.prototype.toString() 方法。Array.prototype.toLocaleString()返回一個(gè)由所有數(shù)組元素組合而成的本地化后的字符串。遮蔽了原型鏈上的 Object.prototype.toLocaleString() 方法。Array.prototype.indexOf()返回?cái)?shù)組中第一個(gè)與指定值相等的元素的索引,如果找不到這樣的元素,則返回 -1。Array.prototype.lastIndexOf()返回?cái)?shù)組中最后一個(gè)(從右邊數(shù)第一個(gè))與指定值相等的元素的索引,如果找不到這樣的元素,則返回 -1。

遍歷方法

在下面的眾多遍歷方法中,有很多方法都需要指定一個(gè)回調(diào)函數(shù)作為參數(shù)。在回調(diào)函數(shù)執(zhí)行之前, 數(shù)組的長度會被緩存在某個(gè)地方,所以,如果你在回調(diào)函數(shù)中為當(dāng)前數(shù)組添加了新的元素, 那么那些新添加的元素是不會被遍歷到的。此外,如果在回調(diào)函數(shù)中對當(dāng)前數(shù)組進(jìn)行了其它修改, 比如改變某個(gè)元素的值或者刪掉某個(gè)元素,那么隨后的遍歷操作可能會受到未預(yù)期的影響。總之, 不要嘗試在遍歷過程中對原數(shù)組進(jìn)行任何修改,雖然規(guī)范對這樣的操作進(jìn)行了詳細(xì)的定義,但為了可讀性和可維護(hù)性,請不要這樣做。

Array.prototype.forEach()為數(shù)組中的每個(gè)元素執(zhí)行一次回調(diào)函數(shù)。Array.prototype.entries()返回一個(gè)數(shù)組迭代器對象,該迭代器會包含所有數(shù)組元素的鍵值對。Array.prototype.every()如果數(shù)組中的每個(gè)元素都滿足測試函數(shù),則返回 true,否則返回 false。Array.prototype.some()如果數(shù)組中至少有一個(gè)元素滿足測試函數(shù),則返回 true,否則返回 false。Array.prototype.filter()將所有在過濾函數(shù)中返回 true 的數(shù)組元素放進(jìn)一個(gè)新數(shù)組中并返回。Array.prototype.find()找到第一個(gè)滿足測試函數(shù)的元素并返回那個(gè)元素的值,如果找不到,則返回 undefined。Array.prototype.findIndex()找到第一個(gè)滿足測試函數(shù)的元素并返回那個(gè)元素的索引,如果找不到,則返回 -1。Array.prototype.keys()返回一個(gè)數(shù)組迭代器對象,該迭代器會包含所有數(shù)組元素的鍵。Array.prototype.map()返回一個(gè)由回調(diào)函數(shù)的返回值組成的新數(shù)組。Array.prototype.reduce()從左到右為每個(gè)數(shù)組元素執(zhí)行一次回調(diào)函數(shù),并把上次回調(diào)函數(shù)的返回值放在一個(gè)暫存器中傳給下次回調(diào)函數(shù),并返回最后一次回調(diào)函數(shù)的返回值。Array.prototype.reduceRight()從右到左為每個(gè)數(shù)組元素執(zhí)行一次回調(diào)函數(shù),并把上次回調(diào)函數(shù)的返回值放在一個(gè)暫存器中傳給下次回調(diào)函數(shù),并返回最后一次回調(diào)函數(shù)的返回值。Array.prototype.values()返回一個(gè)數(shù)組迭代器對象,該迭代器會包含所有數(shù)組元素的值。Array.prototype[@@iterator]()和上面的 values() 方法是同一個(gè)函數(shù)。

參考:

javaScript 參考文檔

Javascript中prototype運(yùn)用(數(shù)組)

在JavaScript中可以用prototype來擴(kuò)展已有類增加自己的方法,在這里提供對Array的擴(kuò)展可減少許多工作量。

<script> /* * 方法:Array.removeAt(Index) * 功能:刪除數(shù)組元素. * 參數(shù):Index刪除元素的下標(biāo). * 返回:在原數(shù)組上修改數(shù)組 */ Array.prototype.removeAt = function (Index) { if (isNaN(Index) || Index > this.length) { return false; } for (var i = 0, n = 0; i < this.length; i++) { if (this[i] != this[Index]) { this[n++] = this[i] } } this.length -= 1 } /* * 方法:Array.remove(obj) * 功能:刪除數(shù)組元素. * 參數(shù):要?jiǎng)h除的對象. * 返回:在原數(shù)組上修改數(shù)組 */ Array.prototype.remove = function (obj) { if (null == obj) { return; } for (var i = 0, n = 0; i < this.length; i++) { if (this[i] != obj) { this[n++] = this[i]; } } this.length -= 1; } /* * 方法:Array.Contains(obj) * 功能:確定某個(gè)元素是否在數(shù)組中. * 參數(shù):要查找的Object對象 * 返回:找到返回true,否則返回false; */ Array.prototype.Contains = function (obj) { if (null == obj) { return; } for (var i = 0, n = 0; i < this.length; i++) { if (this[i] != obj) { return true; } } return false; } /* * 方法:Array.IndexOf(obj) * 功能:搜索指定的Object,并返回第一個(gè)匹配項(xiàng)從零開始的索引 * 參數(shù):要查找的Object對象 * 返回:找到返回該元素在數(shù)組中的索引,否則返回-1 */ Array.prototype.IndexOf = function (obj) { if (null == obj) { return; } { for (var i = 0, n = 0; i < this.length; i++) { if (this[i] == obj) { return i; } } } return -1; } /* * 方法:Array.Clear() * 功能:消空數(shù)組元素. * 參數(shù):無. * 返回:空數(shù)組 */ Array.prototype.Clear = function () { this.length = 0; }</script>

Array是類名,而不是對象名,所以不能直接用Array.slice。

Array.prototype:就是Array的原型. 內(nèi)置的類型可以通過prototype找到內(nèi)置的屬性方法,

Array.prototype.slice這句就是訪問Array的內(nèi)置方法slice

Array.prototype.slice.call(arguments,0) 這句里,就是把 arguments 當(dāng)做當(dāng)前對象.也就是說 要調(diào)用的是 arguments 的slice 方法,后面的 參數(shù) 0 也就成了 slice 的第一個(gè)參數(shù)slice(0)就是獲取所有.

slice 經(jīng)常用來將 array-like 對象轉(zhuǎn)換為 true array。在一些框架中會經(jīng)常有這種用法。

Array.prototype.slice.call(arguments)能將具有l(wèi)ength屬性的對象轉(zhuǎn)成數(shù)組.

Array.prototype.slice.call(arguments,0);

將參數(shù)轉(zhuǎn)換成真正的數(shù)組. call的作用是改變this的指向,就相當(dāng)于arguments(自身沒有slice方法)調(diào)用了slice這個(gè)方法。 0就是start=0,end沒指定,所以返回整個(gè)arguments,這個(gè)時(shí)候就轉(zhuǎn)換成數(shù)組了。

Array.prototype.slice.apply的使用方法 arguments在JavaScript語法中是函數(shù)特有的一個(gè)對象屬性(Arguments對象),用來引用調(diào)用該函數(shù)時(shí)傳遞的實(shí)際參數(shù).apply():第一個(gè)參數(shù)是作用域,第二個(gè)是參數(shù)數(shù)組,其中第二個(gè)參數(shù)可以是數(shù)組實(shí)例,也可以是arguments對象。

apply和call的區(qū)別: 對于apply和call兩者在作用上是相同的,但兩者在參數(shù)上有區(qū)別的。 對于第一個(gè)參數(shù)意義都一樣,但對第二個(gè)參數(shù): apply傳入的是一個(gè)參數(shù)數(shù)組,也就是將多個(gè)參數(shù)組合成為一個(gè)數(shù)組傳入,而call則作為call的參數(shù)傳入(從第二個(gè)參數(shù)開始)。 如

func.call(func1,var1,var2,var3)//對應(yīng)的apply寫法為:func.apply(func1,[var1,var2,var3])

其他例子:

var a={length:2,0:'first',1:'second'};Array.prototype.slice.call(a);// ["first", "second"]var a={length:2};Array.prototype.slice.call(a);// [undefined, undefined]

slice有兩個(gè)用法,一個(gè)是String.slice,一個(gè)是Array.slice,第一個(gè)返回的是字符串,第二個(gè)返回的是數(shù)組

轉(zhuǎn)成數(shù)組的通用函數(shù)

<script> var toArray = function (s) { try { return Array.prototype.slice.call(s); } catch (e) { var arr = []; for (var i = 0, len = s.length; i < len; i++) { //arr.push(s[i]); arr[i] = s[i]; //比push快 } return arr; } }</script>

淺談javascript的Array.prototype.slice.call

JS 有趣的應(yīng)用 : Array.prototype.slice.call(arguments,0)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新昌县| 嘉祥县| 安徽省| 平陆县| 同仁县| 扎赉特旗| 柯坪县| 扶余县| 岳阳市| 陆川县| 陇川县| 恭城| 惠水县| 辽中县| 神池县| 类乌齐县| 额济纳旗| 东明县| 曲靖市| 东海县| 尉犁县| 崇文区| 东台市| 岳阳县| 博野县| 大荔县| 鸡西市| 商城县| 文登市| 嫩江县| 梁河县| 那坡县| 临颍县| 金溪县| 天长市| 资中县| 罗山县| 呼玛县| 新龙县| 常州市| 拜城县|