JS数组易漏知识学习和整理

1. 定义

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。

var arr = ['a', 'b', 'c'];

typeof arr;// object
Object.keys(arr)//返回数组的所有键名
// ["0", "1", "2"]

本质上,数组属于一种特殊的对象

typeof [1, 2,3];// object

数组对数字键的值的访问只能使用方括号结构不能使用点结构;但字符串键可以

var arr = [1, 2, 3];
arr.0 // SyntaxError
arr.foo = true;
arr // [1, 2, 3, foo: true]
arr.foo //true

2. length属性(可写)

如果人为设置一个小于当前成员个数的值,该数组的成员会自动减少到length设置的值。

var arr = [1, 2, 3];

arr.length = 2;
arr // [1, 2]

如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置都是空位。

var a = ['a'];

a.length = 3;
a[1] // undefined

3. 数组本质

数组本质上是一种对象,所以可以为数组添加属性,如果键名为字符串键名将不影响length属性的值。
length属性的值就是等于最大的数字键加1,不合法的数字键则自动转化为字符串键名

let arr = [];
arr[-1] = 'a';
arr[Math.pow(2,23)] = 'b';
arr[100] = 'c';
arr.length // 101
arr[5] // undefined

4. 数组的遍历

  1. for…in 忽略数组空位
  2. delete方法会形成空位
let arr = [1, 2,, 3];
arr.foo = true;
// for循环
for(let i = 0; i < arr.length; i++) {
  console.log(i);
}// 0,1,2,3


// while循环

// 正向遍历
let len = 0;
while(len < arr.length) {
    ...
    len++;
}//结果同上

// 逆向遍历
let l = arr.length;
while(l--) {
    ...
}//结果同上
    
// forEach遍历
arr.forEach(i => {
    console.log(i)
})// 1, 2, 3,遍历的是值,且跳过空位和字符串键名的值
    
// for...in
for(let item in arr) {
    console.log(item);
}// 0,1,3,foo

5. 类数组对象

并不是数组,不具备数组特有的方法(push等)
所有键名都是正整数或零,并且有length属性,只要有length属性,就可以认为这个对象类似于数组
典型的类数组对象:函数的arguments对象,以及大多数 DOM 元素集,还有字符串

var obj = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
};

可以通过call/apply方法转换为数组
call与apply的区别
call: 参数为多个参数
apply: 参数为两个参数,第二个参数为数组

const arr = []
Array.prototype.push.apply(arr, [1, 2];

同理,通过call/apply可以使用slice方法将类数组对象转化为数组

JS中的arguments对象

PS : 总感觉知识的整理抓不住重点,感谢指导
摘自
侵权删,不断完善中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值