【JavaScript笔记 · 基础篇(五)】Array全家桶(引用数据类型中的数组 / Array对象 / Array.prototype)


一. 引用数据类型中的数组

1.1 概述

数组是有序列表,是存放多个值的集合。在数组中,值被称为元素,值可以是任意的数据类型。通过索引来访问元素,索引从0开始。数组长度通过length获取。
本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object

1.2 初始化

1.2.1 字面量
var arr = [5,64,565,12];
1.2.2 构造函数模式
var arr = new Array(); 
// 等价于:var arr = [ ];

var arr = new Array(1,2,3,4); 
// [1,2,3,4]

1.3 访问

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

数组只有一种访问方法,那就是方括号[ ]arr.0的写法不合法,因为单独的数值不能作为标识符。所以,数组成员只能用方括号arr[0]表示(方括号是运算符,可以接受数值)。

1.4 length属性

数组都会有一个不可枚举,但可读可写的length属性,用来返回数组的元素数量。该属性是一个动态的值:length = 数组最大下标 + 1

['a', 'b', 'c'].length // 3

我们在访问数组元素时,如果索引小于数组的长度,则正常返回对应项的值;如果索引大于数组的长度,数组自动增加到该索引值加1的长度,不会有数组越界异常,增加的元素都为空,值为undefined。

var arr = [5,2,0];

console.log(arr[0]);      // 5
console.log(arr[100]);    // undefined
console.log(arr.length);  // 101

length属性可读可写,意味着可以通过设置length的值从数组的末尾移除项或向数组中添加新项(数组的大小是可以动态调整)。

var arr = [5,2,0];

arr.length = 5;
console.log(arr);
// [5,2,0,<2 empty items> ]

arr.length = 2;
console.log(arr);
// [5,2]

1.5 数组遍历

for-in循环不仅可以遍历对象,也可以遍历数组,这更加说明了数组是一种特殊对象。

var a = [1, 2, 3];

for (var i in a) {
   
  console.log(a[i]);
};
// 1
// 2
// 3

数组的遍历还可以考虑使用for循环或while循环,之后还有两个数组原型的实例方法:
Array.prototype.forEach()Array.prototype.map()

1.6 类数组对象

类似如下形式:属性键名为0,1,2…,有length属性的对象就被称为类数组对象。

{
    0: 'a', 1: 'b', length: 2 }

虽然它看起来真的很像数组,但是他们实质上并不是,只是像而已。所以并不能调用数组的实例方法。而且它的length属性也不是动态的。

1.6.1 四种典型的类数组对象
  1. 函数的arguments对象;
function args() {
    return arguments }
var arrayLike = args('a', 'b');

arrayLike[0] // 'a'
arrayLike.length // 2
arrayLike instanceof Array // false
  1. 以及之后的DOM元素集:
var div = document.getElementsByTagName("div");
console.log(div);

在这里插入图片描述
3. 字符串:

'abc'[1] // 'b'
'abc'.length // 3
'abc' instanceof Array // false
  1. 其实还有一个:之后学习jQuery的时候,jQuery对象$("div")也是典型的类数组对象。
console.log($('div'));

在这里插入图片描述

1.6.2 类数组对象转化成真数组的方法
  1. Array.prototype.slice()
Array.prototype.slice.call({
    0: 'a', 1: 'b', length: 2 })
// ['a', 'b']

Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);
  1. Array.from()
Array.from("zevin");
// ['z','e','v','i','n']
Array.from({
   "0":"zevin","1":"code",length:2});
// ['zevin','code']

拓展一点

其实哈,类数组对象也可以不转化成真数组,就可以调用Array的原型实例方法。
通过cal()方法,可以把数组的forEach()方法嫁接到类数组对象上面调用。以字符串为例:

Array.prototype.forEach.call('zevin', function (str) {
   
  console.log(str);
});

// z
// e
// v
// i
// n

二. Array对象

Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组。

var arr = new Array(2);
arr.length // 2
arr // [ <2 empty items> ]

2.1 Array静态方法

Array.isArray()

判断一个变量是否是数组。

var arr = [];
console.log(Array.isArray(arr));
// true
Array.from()

将一个可迭代的对象(类数组对象,字符串)转换成数组。

Array.from("zevin");
// ['z','e','v','i','n']
Array
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值