所謂的類別數組物件:
擁有一個length 屬性和若干索引屬性的物件舉個例子:
var array = ['name', 'age', 'sex']; var arrayLike = { 0: 'name', 1: 'age', 2: 'sex', length: 3 }
#即便如此,為什麼叫做類別陣列物件呢?
那讓我們從讀寫、取得長度、遍歷三個方面來看看這兩個物件。
讀寫
console.log(array[0]); // name console.log(arrayLike[0]); // name array[0] = 'new name'; arrayLike[0] = 'new name';
長度
console.log(array.length); // 3 console.log(arrayLike.length); // 3
遍歷
for(var i = 0, len = array.length; i < len; i++) { …… } for(var i = 0, len = arrayLike.length; i < len; i++) { …… }是不是很像?
那類別陣列物件可以使用陣列的方法嗎?例如:
arrayLike.push('4');
然而上述程式碼會報錯: arrayLike.push is not a function
##所以終迴還是類別陣列吶… …
呼叫陣列方法
#如果類別陣列就是任性的想用陣列的方法怎麼辦呢?
既然無法直接調用,我們可以用Function.call 間接調用:
#
var arrayLike = {0: 'name', 1: 'age', 2: 'sex', length: 3 } Array.prototype.join.call(arrayLike, '&'); // name&age&sex Array.prototype.slice.call(arrayLike, 0); // ["name", "age", "sex"] // slice可以做到类数组转数组 Array.prototype.map.call(arrayLike, function(item){ return item.toUpperCase(); }); // ["NAME", "AGE", "SEX"]
類別數組轉物件
在上面的例子中已經提到了一種類數組轉數組的方法,再補充三個:
var arrayLike = {0: 'name', 1: 'age', 2: 'sex', length: 3 } // 1. slice Array.prototype.slice.call(arrayLike); // ["name", "age", "sex"] // 2. splice Array.prototype.splice.call(arrayLike, 0); // ["name", "age", "sex"] // 3. ES6 Array.from Array.from(arrayLike); // ["name", "age", "sex"] // 4. apply Array.prototype.concat.apply([], arrayLike)
那為什麼會講到類別數組物件呢?以及類別數組有什麼應用嗎?
要說到類別數組對象,Arguments 物件就是一個類別數組物件。在客戶端 JavaScript 中,一些 DOM 方法(document.getElementsByTagName()等)也傳回類別數組物件。
Arguments物件
#接下來重點講講 Arguments 物件。
Arguments 物件只定義在函數體中,包括了函數的參數和其他屬性。在函數體中,arguments 指涉該函數的 Arguments 物件。
舉例:
function foo(name, age, sex) { console.log(arguments); } foo('name', 'age', 'sex')
#列印結果如下:

length屬性
#Arguments物件的length屬性,表示實參的長度,舉例:
function foo(b, c, d){ console.log("实参的长度为:" + arguments.length) } console.log("形参的长度为:" + foo.length) foo(1) // 形参的长度为:3 // 实参的长度为:1
callee屬性
#Arguments 物件的callee 屬性,透過它可以呼叫函數本身。
講個閉包經典面試題使用callee 的解法:
#
var data = []; for (var i = 0; i < 3; i++) { (data<i> = function () { console.log(arguments.callee.i) }).i = i; } data[0](); data[1](); data[2](); // 0 // 1 // 2</i>
##接下來講講arguments 物件的幾個注意重點:
arguments 和對應參數的綁定
function foo(name, age, sex, hobbit) { console.log(name, arguments[0]); // name name // 改变形参 name = 'new name'; console.log(name, arguments[0]); // new name new name // 改变arguments arguments[1] = 'new age'; console.log(age, arguments[1]); // new age new age // 测试未传入的是否会绑定 console.log(sex); // undefined sex = 'new sex'; console.log(sex, arguments[2]); // new sex undefined arguments[3] = 'new hobbit'; console.log(hobbit, arguments[3]); // undefined new hobbit } foo('name', 'age')傳入的參數,實參和arguments 的值會共享,當沒有傳入時,實參與arguments 值不會共享
除此之外,以上是在非嚴格模式下,如果是在嚴格模式下,實參和arguments 是不會共享的。
傳遞參數
#將參數從一個函數傳遞到另一個函數
#
// 使用 apply 将 foo 的参数传递给 bar function foo() { bar.apply(this, arguments); } function bar(a, b, c) { console.log(a, b, c); } foo(1, 2, 3)
強大的ES6#使用ES6的...運算符,我們可以輕鬆轉換成數組。
function func(...arguments) { console.log(arguments); // [1, 2, 3] } func(1, 2, 3);
應用程式#arguments的應用其實很多,在下個系列,也就是JavaScript 專題系列中,我們會在jQuery 的extend 實作、函數柯里化、遞歸等場景看見arguments 的身影。這篇文章就不具體展開了。
如果要總結這些場景的話,暫時能想到的包括:
參數不定長
-
函數柯里化
遞迴呼叫
函數重載 ...
以上是JavaScript類別數組物件與arguments實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)