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

首頁(yè) > 編程 > JavaScript > 正文

Array.prototype 的泛型應(yīng)用分析

2019-11-21 00:32:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
題目
請(qǐng)說(shuō)明下面語(yǔ)句的輸出:
復(fù)制代碼 代碼如下:

x = {shift:[].shift};
x.shift();
console.info(x.length);

如果你回答正確,那么說(shuō)明你已經(jīng)了解 Array 函數(shù)的泛型應(yīng)用。在理解這到題目之前,我 我們首先要了解數(shù)組(Array)的 shift 定義。

MDC 中已經(jīng)對(duì)相關(guān)的說(shuō)明描述得非常的清楚
復(fù)制代碼 代碼如下:

shift is intentionally generic; this method can be called or
applied to objects resembling arrays. Objects which do not
contain a length property reflecting the last in a series of
consecutive, zero-based numerical properties may not behave
in any meaningful manner.

同時(shí),EMCAScript 中的定義也同時(shí)定義了對(duì)于 shift 操作對(duì)于對(duì)象 length 屬性的改變, 那么基本上我們可以了解到上題中的答案為
復(fù)制代碼 代碼如下:
0

擴(kuò)散思維
如果對(duì)于上面的題目還無(wú)法理解,那么我們更清楚的說(shuō)明 Array.prototype.shift 對(duì)對(duì)象 的 length 的影響。
復(fù)制代碼 代碼如下:

x = {};
Array.prototype.shift.call(x);
console.info(x.length);

很明顯,對(duì)于對(duì)象如果為定義 length 屬性,則 shift 則會(huì)自動(dòng)加上 length 屬性并設(shè)置 為 0 。

既然已經(jīng)說(shuō)到這里,那么下面的題目輸出什么留給大家去思考。
復(fù)制代碼 代碼如下:

x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);

重新認(rèn)識(shí)泛型
很明顯,上面的題目有可能還是無(wú)法說(shuō)明本篇文章的題目。泛型(Generic)應(yīng)用其實(shí) 期前也說(shuō)明過(guò),但這里主要說(shuō)明 Array 方法對(duì)于“類數(shù)組”的操作使用。

強(qiáng)制轉(zhuǎn)換為數(shù)組
復(fù)制代碼 代碼如下:

var args = Array.prototype.slice.call(arguments);

這個(gè)用法比較火星,其實(shí)期前也用過(guò),詳細(xì)參見(jiàn)這里。

迭代數(shù)據(jù)
復(fù)制代碼 代碼如下:

Array.prototype.forEach.call(arguments, function(i) {
console.info(i);
});

如果對(duì)象能夠被遞歸,則出了“傳統(tǒng)”的 for、while 等語(yǔ)句以外,還可以考慮使用 Array 的 forEach 屬性(注意 IE 會(huì)是悲?。?。Array 的 forEach 方法詳見(jiàn)這里。

其他的 Array 擴(kuò)展用法可以散發(fā)自己的思維,如果對(duì)應(yīng)瀏覽器的 Array 沒(méi)有對(duì)應(yīng)的實(shí)現(xiàn)方 法,可以參見(jiàn)這里。

其實(shí),不僅僅是 Array 方法,很多瀏覽器原生對(duì)象的方法都是泛型,我們完全可以利用這 這些特性使代碼更為的清晰
使用原生方法,效率更高。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 天柱县| 祁连县| 淮安市| 双桥区| 兴国县| 临夏市| 峨边| 资溪县| 阿尔山市| 土默特左旗| 樟树市| 九龙坡区| 辽宁省| 长海县| 桐城市| 云南省| 辽阳县| 新巴尔虎左旗| 祁阳县| 日土县| 台南县| 金溪县| 五寨县| 普定县| 雷波县| 北海市| 绥阳县| 全南县| 沙湾县| 武鸣县| 吴江市| 额敏县| 泰兴市| 普兰县| 深水埗区| 根河市| 策勒县| 名山县| 上饶市| 东乌珠穆沁旗| 星子县|