js类数组

类数组 - [ Array-like ] : objects

1. what‘s Array-like

  类数组和数组很像,但是数组的很多方法却不能用,这就很尴尬了~

  像 arguments、nodelist 等这些数据有序集合,有长度和下标等属性,但却不是 Array. 这就是所谓的 Array-like(类数组/伪数组)。对于 Array-like 我们可以用跨原型链来操作,eg :Array.prototype.slice.call(arguments, 0); 这也是把 Array-like 转化成 Array 的方法哦。

2. 自己构造 Array-like 

  

  就是添加 Array 的原生方法到 自己创建的 Object 里。

  如果不给 a 添加 length 属性。push 的时候会把 a[0] 和 a[1] 覆盖掉。

3. 如何判断是不是 Array

  typeof去判断数组得到的结果是 ‘object’,所以很多 LIB 都采用了 duck typing(鸭子类型检测)的方式,它的判断条件是: 当对象的 length 属性是一个数字,并且 splice 属性是一个 function, 那么这个对象就是数组。

  

  

时间: 2024-10-29 00:37:37

js类数组的相关文章

js类数组转数组的方法(ArrayLike)

1. 什么是类数组ArrayLike 拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 不具有数组所具有的方法 //类数组示例 var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei' //非类数组示例 var c = {'1':2}; //没有length属性就不是类数

js 类数组转数组

来自某道面试题,题忘了,难点在于:function 中的argument类数组怎么转数组 我们来看看argument是什么 function myToArray(){ console.log(arguments); console.log(arguments === Array) } myToArray(3,5,7); Chrome下控制台 我们来看arguments并不是数组,事实上typeof(arguments)输出是一个Object 怎么这么熟悉??? 我们来看JQuery下$()下返回

JS === 类数组(伪数组)

// 今天跟成哥学习了类数组的相关用法,涨见识了,记录一下~ 类数组: //属性要为索引(数字)属性,必须要有length属性,最好要加上push Array.prototype.push = function(target){ obj[obj.length] = target; obj.length++; } var obj = { "2" : " a", "3" : "b", "length" : 2,

观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array object. 简单的说就是根据参数,返回数组的一部分的copy.所以了解其内部实现才能确定它是如何工作的.所以查看V8源码中的Array.js     可以看到如下的代码: 一.方法  ArraySlice,源码地址,直接添加到Array.prototype上的"入口",内部经过参数.类型

JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

原文地址 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型,Array,Map,Set都属于iterable类型,它们可以使用for...of循环来遍历,都内置forEach方法. 数组 遍历 普通遍历 最简单的一种,也是使用频率最高的一种. let arr = ['a', 'b', 'c', 'd', 'e'] for (let i = 0; i < ar

js中的节点遍历+类数组对象

firstChild  第一个子元素 lastChild  最后一个子元素 childNodes[n]  =   childNodes.item(n)    第n+1个子元素 parentNode  父元素 nextSibling  下一个兄弟元素 previousSibling  上一个兄弟元素 document.documentElement 获取文档的根节点 .tagName 标签名 <!DOCTYPE html> <html lang="en"> <

arguments类数组对象

------------   ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数. --------------------------JS函数没有真正意义上的重载. 在函数内部有两个特殊的对象 : arguments和this. 当函数被调用时,传入的参数将保存在arguments类数组对象中,通过arguments可以访问所有该函数被调用时传递给它的参数列表. arguments并不是一个真正的数组,而是一个“类似数组(array-like)”的对象,因为arguments

jQuery的类数组对象结构(转)

原文:http://www.imooc.com/code/3248 为什么是类数组对象呢? 很多人迷惑的jQuery为什么能像数组一样操作,通过对象get方法或者直接通过下标0索引就能转成DOM对象. 首先我们看jQuery的入口都是统一的$, 通过传递参数的不同,实现了9种方法的重载: 1. jQuery([selector,[context]]) 2. jQuery(element) 3. jQuery(elementArray) 4. jQuery(object) 5. jQuery(jQ

[Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bits.bitAt(4);//1 bits.bitAt(8);//1 bits.bitAt(9);//0 enable方法被重载了,可以传入一个索引或索引的数组.第二个类的API是字符串集合:无序的字符串集合 var set=new StringSet(); set.add('Hamlet'); se