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

首頁 > 語言 > JavaScript > 正文

將函數的實際參數轉換成數組的方法

2024-05-06 14:11:46
字體:
來源:轉載
供稿:網友
值得慶幸的是,我們可以通過數組的 slice 方法將 arguments 對象轉換成真正的數組:
var args = Array.prototype.slice.call(arguments);
對于slice 方法,ECMAScript 262 中 15.4.4.10 Array.prototype.slice (start, end) 章節有備注:
代碼如下:
The slice function is intentionally generic; it does not require that its this value be an Array object. Therefore it can be transferred to other kinds of objects for use as a method. Whether the slice function can be applied successfully to a host object is implementation-dependent.

《Pro JavaScript Design Patterns》(《JavaScript 設計模式》)的作者 Dustin Diaz 曾指出:
代碼如下:
instead of…
var args = Array.prototype.slice.call(arguments); // 懌飛注:下稱方法一
do this…
var args = [].slice.call(arguments, 0); // 懌飛注:下稱方法二

但二者的性能差異真的存在嗎?經過個人簡單測試發現:

在 arguments.length 較小的時候,方法二性能上稍有一點點優勢,而在arguments.length 較大的時候,方法一卻又稍有優勢。

最后附上方法三,最老土的方式:
代碼如下:
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}

不過對于平常來說,個人建議還是使用第二種方法,但任何解決方案,沒有最好的,只有最合適:
代碼如下:
var args = [].slice.call(arguments, 0);
理由有二:

一般的函數的 arguments.length 都在 10 以內,方法二有優勢;
方法二的代碼量上也比第一種少,至少可以減小一點字節 ^^

如何將 NodeList (比如:document.getElementsByTagName('div'))轉換成數組呢?

解決方案簡單如下:
代碼如下:
function nodeListToArray(nodes){
var arr, length;
try {
// works in every browser except IE
arr = [].slice.call(nodes);
return arr;
} catch(err){
// slower, but works in IE
arr = [];
length = nodes.length;
for(var i = 0; i < length; i++){
arr.push(nodes[i]);
}
return arr;
}
}

為什么 IE 中 NodeList 不可以使用 [].slice.call(nodes) 方法轉換呢?
In Internet Explorer it throws an error that it can't run Array.prototype.slice.call(nodes) because a DOM NodeList is not a JavaScript object.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 贺州市| 古交市| 大同市| 尼玛县| 河南省| 合山市| 彩票| 绍兴县| 兴义市| 噶尔县| 南京市| 遂川县| 晋州市| 新平| 邯郸市| 金坛市| 黎平县| 来安县| 文登市| 临潭县| 周口市| 博野县| 汝州市| 通榆县| 那曲县| 晋州市| 辉南县| 荥阳市| 武穴市| 永兴县| 峡江县| 买车| 贵阳市| 石屏县| 长汀县| 雅江县| 姚安县| 金寨县| 镇宁| 荣昌县| 江北区|