JavaScript中伪数组和数组有什么区别

  

JavaScript中伪数组和数组有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

JavaScript的作用是什么

1,能够嵌入动态文本于HTML页面。2,对浏览器事件做出响应。3,读写HTML元素。4、在数据被提交到服务器之前验证数据。5,检测访客的浏览器信息。6,控制饼干,包括创建和修改等7,基于节点。js技术进行服务器端编程。

<强>伪数组和数组

在JavaScript中,除了5种原始数据类型之外,其他所有的都是对象,包括函数(功能)。

对象与数组的关系

在说区别之前,需要先提到另外一个知识,就是JavaScript的原型继承。

所有JavaScript的内置构造函数都是继承自对象。原型。

在这个前提下,可以理解为使用新数组()或[]创建出来的数组对象,都会拥有对象。原型的属性值。

var  obj =,{},//,拥有,Object.prototype 的属性值   var  arr =, [];//使用数组直接量创建的数组,由于,Array.prototype 的属性继承自,Object.prototype,//那么,它将同时拥有,Array.prototype 和,Object.prototype 的属性值

可以得到对象和数组的第一个区别:对象没有数组数组中。原型的属性值。

什么是数组

数组具有一个最基本特征:索引,这是对象所没有的,下面来看一段代码:

var  obj =, {};   var  arr =, [];   ,   obj[2],=, & # 39;一个# 39;;   arr[2],=, & # 39;一个# 39;;   ,   console.log (obj[2]);,//,=祝辞;一个   console.log (arr[2]);,//,=祝辞;一个   console.log (obj.length);,//,=在未定义   console.log (arr.length);,//,=祝辞,3 <李>

obj[2]输出& # 39;一个# 39;,是因为对象就是普通的键值对存取数据

<李>

而arr[2]输出& # 39;一个# 39;则不同,数组是通过索引来存取数据,arr[2]之所以输出& # 39;一个# 39;,是因为数组arr索引2的位置已经存储了数据

<李>

obj.length并不具有数组的特性,并且obj没有保存属性长度,那么自然就会输出未定义的

<李>

而对于数组来说,长度是数组的一个内置属性,数组会根据索引长度来更改长度的值

<李>

为什么加勒比海盗。长输出3,而不是1

<李>

在给数组添加元素时,并没有按照连续的索引添加,所以导致数组的索引不连续,那么就导致索引长度大于元素个数

什么是伪数组

<李>

拥有长度属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)

<李>

不具有数组所具有的方法

伪数组,就是像数组一样有长度属性,也有0,1,2,3等属性的对象,看起来就像数组一样,但不是数组,比如:

var  fakeArray =, {   “0”:才能,“至上”,   “1”:才能,“second",   “2”:才能,“third",   ,,长度:3   };   ,   for  (var 小姐:=,0;,小姐:& lt;, fakeArray.length;,我+ +),{   console.log才能(fakeArray[我]);   }   ,   Array.prototype.join.call (fakeArray & # 39; + & # 39;);

<强>常见的伪数组有:

<李>

函数内部的参数

<李>

DOM对象列表(比如通过文档。getElementsByTags得到的列表)

<李>

jQuery对象(比如美元(“div"))

伪数组是一个对象,而真实的数组是一个数组。

伪数组存在的意义,是可以让普通的对象也能正常使用数组的很多方法,比如:

var  arr =, Array.prototype.slice.call(参数);   ,   Array.prototype.forEach.call(参数,函数(v), {//才能,循环参数对象   });//把//一些//每一个//过滤//地图//,…

以上在借用数组的原型方法的时候都可以通过数组直接量来简化使用:

var  obj =, {   ,,0:& # 39;一个# 39;   ,,1:& # 39;b # 39;   ,,2:& # 39;c # 39;   ,,长度:3   }      ;[].push.call (obj, & # 39; d # 39;)      console.log ([] .slice.call (obj))      ;[].forEach.call (obj, function  (num,指数),{   console.log才能(num)   })

二者区别

<强> 1。长度:

JavaScript中伪数组和数组有什么区别