JS中的伪数组

一.维数组和数组的区别

a). 真数组的长度是可变的,是内置的属性
     伪数组的长度不可变,是自定义的一个属性
b).真数组可以使用数组中的方法
    伪数组不可以实用数组中的方法
c).真数组可以访问数组的方法
   伪数组不能直接访问数组的方法

1.数组对象 具备自己本身的原型意外,还具备Object里的原型数据

由于Array.prototype属性继承自Object.prototype
因此它将同时拥有Array和Object.prototype的属性值

2.数组:一组数据的集合,根据索引获取数据

注意:在数组中数据以索引存储,在对象中以键值对形式存储
在对象中以点语法获取数据的值
eg:person{
	name:"张三',
	age:23
}
点语法;person.name
[]语法:person["name].//以键名的方式获取

3.伪数组

	若返回的结果是一个Object类型的数组,则为伪数组
	arguments:是一个可变参数
	function getNum(){
			for(var i=0;i<arguments.length;i++){
					console.log(arguments[ i ]);
			}
		}
		getNum(20, 10, 30, 5);

	eg: son{
		0:'李四',
		1:"男",
		3:24,
		length:3
		}
		for(var i-0;i<son.length;i++){
			console.log(son [ i ]);//此处的i并不是索引数,而是键名
		}
### JavaScript 中的伪数组及其用法 #### 什么是伪数组伪数组是一种特殊的对象结构,它看起来像数组,但实际上并不是真正的数组。它的主要特点是具有 `length` 属性,并且其键值通常是连续的整数索引[^3]。然而,由于它是普通的对象而不是真正的数组实例,因此不具备原生数组的方法(如 `push()` 或 `forEach()`)。以下是伪数组的一些典型特性: - 它是一个对象而非数组。 - 不具备数组原型链上的方法。 - 长度不可变。 ```javascript let pseudoArray = { '0': 'value1', '1': 'value2', length: 2 }; console.log(pseudoArray instanceof Array); // false ``` #### 如何将伪数组转换为真实数组? ##### 方法一:使用 `Array.prototype.slice.call()` 这是最常见的方法之一,利用 `slice` 的能力将其转化为真实数组。此方法适用于任何类数组对象。 ```javascript function convertToArray(args) { return Array.prototype.slice.call(args); } function exampleFunction() { let realArray = convertToArray(arguments); console.log(realArray); // 转换后的实际数组 } exampleFunction('a', 'b', 'c'); // 输出 ['a', 'b', 'c'] ``` 这种方法被广泛推荐用于处理函数内的 `arguments` 对象[^1]。 ##### 方法二:通过遍历构建新数组 另一种方式是手动迭代伪数组的内容并填充到一个新的数组中。 ```javascript let pseudoArray = { '0': 'item1', '1': 'item2', length: 2 }; let actualArray = []; for (let i = 0; i < pseudoArray.length; i++) { actualArray.push(pseudoArray[i]); } console.log(actualArray); // ["item1", "item2"] ``` 这种方式简单明了,在某些情况下可能更直观易懂[^2]。 ##### 方法三:使用扩展运算符 (`...`) ES6 引入了扩展运算符,这提供了一种更加简洁的方式来实现同样的目标。 ```javascript let pseudoArray = { '0': 'apple', '1': 'banana', length: 2 }; let newArray = [...pseudoArray]; console.log(newArray); // ["apple", "banana"] ``` 需要注意的是,这种技术依赖于输入确实遵循特定形式——即拥有正确的数值型键名和有效的 `length` 属性[^5]。 ##### 方法四:运用 `Array.from()` 自 ES6 开始支持的新工具允许我们轻松地把可迭代项或者类似数组的对象转变成正式的数组。 ```javascript let arrayLikeObj = { '0': 'foo', '1': 'bar', length: 2 }; const resultArr = Array.from(arrayLikeObj); console.log(resultArr); // ["foo", "bar"] ``` 这是一个非常现代且功能强大的解决方案[^4]。 --- ### 总结 JavaScript 中存在所谓的“伪数组”,它们虽然表现得类似于常规数组,但由于缺乏继承关系等原因无法直接调用诸如 `.map`, `.filter` 这样的实用方法。为了充分利用这些数据集合的功能,开发者通常会采用上述几种策略之一来进行必要的转化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值