JavaScript数组和伪数组

伪数组和数组

记住一句话: 伪数组是一个Object,数组是Array。

对象和数组之间的关系

JavaScript的内置函数继承与 Object.prototype

可以认为new Array()[]创建出来的数组对象, 都拥有Object.prototype属性值。

var obj = {}; //拥有Object.prototype的属性值
var arr = []; //由于Array.prototype的属性继承自Object.prototype, 那么它就是拥有两个属性
// 即Array.prototype和Object.prototype

注意: 对象没有数组的Array.prototype属性值

什么是数组

数组的基本特征: 索引(下标)取值

var obj = {};
var array = [];

obj[0] = "L";
array[0] = "L";
console.log(obj); // {0: "L"}

console.log(obj[0]); // L
console.log(array[0]); // L
console.log(obj.length); // undefined
console.log(array.length); // 1
  1. 数组取值是根据索引进行获取值, 而对象是根据键值对进行取值
  2. 对象没有数组的特性(索引),并且obj没有保存属性length,那么就是未定义,所以undefined
  3. 对于数组来讲,length是数组的内置属性,数组根据索引长度来更改length

什么是伪数组

  1. 具有length属性,其他属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
  2. 不具有数组的方法

伪数组类似于Python中的字典

var fakeArray = {
    "0":"胡珺",
    "1":23,
    length:2
};
for (var i=0;i<fakeArray.length;i++){
    console.log(fakeArray[i])
}
常见的伪数组
  • 函数内部的arguments
  • DOM对象列表(document.getElementsByTags)
  • jQuery对象($("div"))

注意: 伪数组是一个对象

简单的一个应用

var obj = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
}
;[].push.call(obj, 'd');

console.log([].slice.call(obj))

;[].forEach.call(obj, function (num, index) {
  console.log(num)
})

差别

  1. 对象没有数组的Array.prototype 的属性值,类型是 Object ,而数组类型是 Array
  2. 数组是索引,对象是键值对
  3. 使用对象创建伪数组,伪数组可以使用部分方法

转载于:https://www.cnblogs.com/liudemeng/p/11510275.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
区分真数组伪数组的方法有以下几种: 1. 使用`Array.isArray()`方法:这是一种最简单的方法,可以通过`Array.isArray()`方法来判断一个对象是否为真数组。如果返回值为`true`,则表示该对象是一个真数组;如果返回值为`false`,则表示该对象是一个伪数组。 ```javascript var arr = [1, 2, 3]; var obj = {0: 1, 1: 2, 2: 3, length: 3}; console.log(Array.isArray(arr)); // 输出:true console.log(Array.isArray(obj)); // 输出:false ``` 2. 使用`instanceof`操作符:可以使用`instanceof`操作符来判断一个对象是否为数组的实例。如果返回值为`true`,则表示该对象是一个真数组;如果返回值为`false`,则表示该对象是一个伪数组。 ```javascript var arr = [1, 2, 3]; var obj = {0: 1, 1: 2, 2: 3, length: 3}; console.log(arr instanceof Array); // 输出:true console.log(obj instanceof Array); // 输出:false ``` 3. 判断对象的类型和属性:可以使用`typeof`操作符来判断对象的类型,如果返回值为`object`,则表示该对象是一个伪数组。此外,伪数组通常具有`length`属性,可以通过判断对象是否具有`length`属性来区分真数组伪数组。 ```javascript var arr = [1, 2, 3]; var obj = {0: 1, 1: 2, 2: 3, length: 3}; console.log(typeof arr); // 输出:object console.log(typeof obj); // 输出:object console.log('length' in arr); // 输出:true console.log('length' in obj); // 输出:true ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值