Array.prototype 的泛型應(yīng)用分析
更新時間:2010年04月30日 15:11:57 作者:
Array.prototype 的泛型應(yīng)用分析,需要的朋友可以參考下。
題目
請說明下面語句的輸出:
x = {shift:[].shift};
x.shift();
console.info(x.length);
如果你回答正確,那么說明你已經(jīng)了解 Array 函數(shù)的泛型應(yīng)用。在理解這到題目之前,我 我們首先要了解數(shù)組(Array)的 shift 定義。
MDC 中已經(jīng)對相關(guān)的說明描述得非常的清楚
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 屬性的改變, 那么基本上我們可以了解到上題中的答案為
擴(kuò)散思維
如果對于上面的題目還無法理解,那么我們更清楚的說明 Array.prototype.shift 對對象 的 length 的影響。
x = {};
Array.prototype.shift.call(x);
console.info(x.length);
很明顯,對于對象如果為定義 length 屬性,則 shift 則會自動加上 length 屬性并設(shè)置 為 0 。
既然已經(jīng)說到這里,那么下面的題目輸出什么留給大家去思考。
x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);
重新認(rèn)識泛型
很明顯,上面的題目有可能還是無法說明本篇文章的題目。泛型(Generic)應(yīng)用其實(shí) 期前也說明過,但這里主要說明 Array 方法對于“類數(shù)組”的操作使用。
強(qiáng)制轉(zhuǎn)換為數(shù)組
var args = Array.prototype.slice.call(arguments);
這個用法比較火星,其實(shí)期前也用過,詳細(xì)參見這里。
迭代數(shù)據(jù)
Array.prototype.forEach.call(arguments, function(i) {
console.info(i);
});
如果對象能夠被遞歸,則出了“傳統(tǒng)”的 for、while 等語句以外,還可以考慮使用 Array 的 forEach 屬性(注意 IE 會是悲劇)。Array 的 forEach 方法詳見這里。
其他的 Array 擴(kuò)展用法可以散發(fā)自己的思維,如果對應(yīng)瀏覽器的 Array 沒有對應(yīng)的實(shí)現(xiàn)方 法,可以參見這里。
其實(shí),不僅僅是 Array 方法,很多瀏覽器原生對象的方法都是泛型,我們完全可以利用這 這些特性使代碼更為的清晰
使用原生方法,效率更高。
請說明下面語句的輸出:
復(fù)制代碼 代碼如下:
x = {shift:[].shift};
x.shift();
console.info(x.length);
如果你回答正確,那么說明你已經(jīng)了解 Array 函數(shù)的泛型應(yīng)用。在理解這到題目之前,我 我們首先要了解數(shù)組(Array)的 shift 定義。
MDC 中已經(jīng)對相關(guān)的說明描述得非常的清楚
復(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.
同時,EMCAScript 中的定義也同時定義了對于 shift 操作對于對象 length 屬性的改變, 那么基本上我們可以了解到上題中的答案為
復(fù)制代碼 代碼如下:
0
擴(kuò)散思維
如果對于上面的題目還無法理解,那么我們更清楚的說明 Array.prototype.shift 對對象 的 length 的影響。
復(fù)制代碼 代碼如下:
x = {};
Array.prototype.shift.call(x);
console.info(x.length);
很明顯,對于對象如果為定義 length 屬性,則 shift 則會自動加上 length 屬性并設(shè)置 為 0 。
既然已經(jīng)說到這里,那么下面的題目輸出什么留給大家去思考。
復(fù)制代碼 代碼如下:
x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);
重新認(rèn)識泛型
很明顯,上面的題目有可能還是無法說明本篇文章的題目。泛型(Generic)應(yīng)用其實(shí) 期前也說明過,但這里主要說明 Array 方法對于“類數(shù)組”的操作使用。
強(qiáng)制轉(zhuǎn)換為數(shù)組
復(fù)制代碼 代碼如下:
var args = Array.prototype.slice.call(arguments);
這個用法比較火星,其實(shí)期前也用過,詳細(xì)參見這里。
迭代數(shù)據(jù)
復(fù)制代碼 代碼如下:
Array.prototype.forEach.call(arguments, function(i) {
console.info(i);
});
如果對象能夠被遞歸,則出了“傳統(tǒng)”的 for、while 等語句以外,還可以考慮使用 Array 的 forEach 屬性(注意 IE 會是悲劇)。Array 的 forEach 方法詳見這里。
其他的 Array 擴(kuò)展用法可以散發(fā)自己的思維,如果對應(yīng)瀏覽器的 Array 沒有對應(yīng)的實(shí)現(xiàn)方 法,可以參見這里。
其實(shí),不僅僅是 Array 方法,很多瀏覽器原生對象的方法都是泛型,我們完全可以利用這 這些特性使代碼更為的清晰
使用原生方法,效率更高。
相關(guān)文章
封裝一個vue中也可使用的uniapp的全局彈窗組件(任何頁面都可以彈出)
在寫uniapp小程序的時候,彈窗提醒經(jīng)常會用到,雖然彈窗的組件很多,但是通常別人封裝好的彈窗組件自定義度不高,很難匹配自己的ui需求,這篇文章主要給大家介紹了封裝一個vue中也可使用的uniapp的全局彈窗組件的相關(guān)資料,這個組件在任何頁面都可以彈出,需要的朋友可以參考下2023-02-02關(guān)于javascript函數(shù)的幾個話題
關(guān)于javascript函數(shù)的幾個話題...2007-03-03js實(shí)現(xiàn)分享到隨頁面滾動而滑動效果的方法
這篇文章主要介紹了js實(shí)現(xiàn)分享到隨頁面滾動而滑動效果的方法,實(shí)例分析了javascript操作頁面元素滾動效果的方法,需要的朋友可以參考下2015-04-04js事件監(jiān)聽機(jī)制(事件捕獲)總結(jié)
添加事件的js方法也很多,有直接加到頁面結(jié)構(gòu)上的,有使用一些js事件監(jiān)聽的方法,由于各個瀏覽器對事件冒泡事件監(jiān)聽的機(jī)制不同2014-08-08JavaScript實(shí)現(xiàn)的MD5算法完整實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的MD5算法,以完整實(shí)例形式分析了基于JavaScript實(shí)現(xiàn)MD5算法的具體步驟與相關(guān)技巧,需要的朋友可以參考下2016-02-02使用JavaScript和CSS實(shí)現(xiàn)簡單的字符計(jì)數(shù)器
在本文中,你將學(xué)習(xí)如何使用?JavaScript?創(chuàng)建字符計(jì)數(shù)器。計(jì)數(shù)的數(shù)字可以在小顯示屏中看到。文中示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08使用JavaScript校驗(yàn)URL的方法小結(jié)
JavaScript中如何校驗(yàn)一個URL?最近遇到幾次需要校驗(yàn)URL的,所以本文給大家整理一下幾個校驗(yàn)URL的方法,文中有詳細(xì)的代碼講解和圖文參考,具有一定的參考價值,需要的朋友可以參考下2023-12-12解決layui追加或者動態(tài)修改的表單元素“沒效果”的問題
今天小編就為大家分享一篇解決layui追加或者動態(tài)修改的表單元素“沒效果”的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09