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

首頁 > 語言 > JavaScript > 正文

Array.prototype 的泛型應用分析

2024-05-06 14:10:16
字體:
來源:轉載
供稿:網友
題目
請說明下面語句的輸出:
代碼如下:
x = {shift:[].shift};
x.shift();
console.info(x.length);

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

MDC 中已經對相關的說明描述得非常的清楚
代碼如下:
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.

同時,EMCAScript 中的定義也同時定義了對于 shift 操作對于對象 length 屬性的改變, 那么基本上我們可以了解到上題中的答案為
代碼如下:0
擴散思維
如果對于上面的題目還無法理解,那么我們更清楚的說明 Array.prototype.shift 對對象 的 length 的影響。
代碼如下:
x = {};
Array.prototype.shift.call(x);
console.info(x.length);

很明顯,對于對象如果為定義 length 屬性,則 shift 則會自動加上 length 屬性并設置 為 0 。

既然已經說到這里,那么下面的題目輸出什么留給大家去思考。
代碼如下:
x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);

重新認識泛型
很明顯,上面的題目有可能還是無法說明本篇文章的題目。泛型(Generic)應用其實 期前也說明過,但這里主要說明 Array 方法對于“類數組”的操作使用。

強制轉換為數組
代碼如下:
var args = Array.prototype.slice.call(arguments);

這個用法比較火星,其實期前也用過,詳細參見這里。

迭代數據
代碼如下:
Array.prototype.forEach.call(arguments, function(i) {
console.info(i);
});

如果對象能夠被遞歸,則出了“傳統”的 for、while 等語句以外,還可以考慮使用 Array 的 forEach 屬性(注意 IE 會是悲劇)。Array 的 forEach 方法詳見這里。

其他的 Array 擴展用法可以散發自己的思維,如果對應瀏覽器的 Array 沒有對應的實現方 法,可以參見這里。

其實,不僅僅是 Array 方法,很多瀏覽器原生對象的方法都是泛型,我們完全可以利用這 這些特性使代碼更為的清晰
使用原生方法,效率更高。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 壶关县| 南安市| 耿马| 岐山县| 澄迈县| 东安县| 米脂县| 万安县| 家居| 马鞍山市| 寻甸| 阜城县| 济宁市| 萨嘎县| 阳高县| 子洲县| 乐山市| 新余市| 乌拉特中旗| 正镶白旗| 买车| 朝阳县| 邵东县| 萍乡市| 石河子市| 志丹县| 溧阳市| 九寨沟县| 林州市| 张家界市| 大宁县| 南昌县| 长岭县| 墨江| 灵川县| 淮北市| 中卫市| 临江市| 鄂托克旗| 沁水县| 浦东新区|