源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 82|回复: 19

[JavaScript] JavaScript中的数组特性介绍

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2018-12-25 05:41:55 | 显示全部楼层 |阅读模式
这篇文章主要介绍了JavaScript中的数组特性介绍,本文总结了数组的3种特性和4种创建数组的方法,需要的朋友可以参考下

与Java语言不同,JavaScript中的数组拥有三个特性:

 

1.无类型。数组的成员可以是任何类型,同一个数组也可以由很多不同类型的成员所组成。
2.长度可变。数组的长度是可以动态变化的,因此在JavaScript中不存在数组访问的越界问题。
3.不连续性。数组中成员的位置可以是连续的(0, 1, 2, 3…),也可以是不连续的。任何数组都有一个名为length的属性,在数组成员连续的情况下,length值与数组成员数目一致;当数组成员不连续时,length值要大于数组成员的数目。与连续的数组相比,不连续数组的读写性能要差一些。

 

实验:


复制代码 代码如下:
var o = [42, "Sample Text", {x:88}];//JavaScript array is un-typed.
console.log(o);//[42, "Sample Text", Object {x=88}]
o[3] = 27;//JavaScript array is dynamic.
console.log(o);//[42, "Sample Text", Object {x=88}, 27]
o[5] = 99;//JavaScript array is sparse.
console.log(o);//[42, "Sample Text", Object {x=88}, 27, undefined, 99]


从上面的例子中可以看到,对于不连续的数组,当访问到缺失的那个成员时,JavaScript将返回undefined。如果数组连续,但是其中某个成员为undefined,那么访问数组的结果是一样的:


复制代码 代码如下:
var a = [42, "Sample Text", {x:88}, 27, undefined, 99];
console.log(a);//[42, "Sample Text", Object {x=88}, 27, undefined, 99]


数组不连续、有成员缺失,跟数组连续、但有成员为undefined,这两种情况下访问数组内容所得到的结果是一样的。但在这两者之间还是存在一些细微的差别,主要表现在对数组key的访问上:


复制代码 代码如下:
console.log(4 in o);//false
console.log(4 in a);//true


可以看到,这两种情况下虽然访问内容所得到的结果一致,但是其内部机制是完全不同的:在数组不连续的情况下,某个成员缺失,因此当访问该成员时,JavaScript返回了undefined;在数组连续的情况下,所有的成员都存在,只是某些成员的值比较特殊,为undefined而已。

从上面的例子中也可以看到,JavaScript中的数组究其本质只是以数字为key的对象而已,与普通的键值对对象没有任何差别。事实上,在对数组进行读取和写入操作时,JavaScript会试图将参数转换为正整数,如果转换成功则将进行数组操作(自动更新数组的length属性),如果失败则将参数转换成字符串后进行普通对象的读写操作。当然,在JavaScrpt解释器的实现中,针对数组的这种以数字作为key的特性作了很多性能优化,因此在实际使用过程中,如果对象的key都是数字,那么直接使用数组对象会得到更加高效的结果。

在对数组进行定义的过程中,JavaScript允许出现多余的逗号,也允许两个逗号间出现数组成员的缺失:


复制代码 代码如下:
var x = [1,2,3,];//trailing comma will be omitted.
console.log(x.length);//3
        
var y = [1,,3];//member can be missed.
console.log(y);//[1, undefined, 3]
console.log(1 in y);//false
console.log(y.length);//3


对于数组的创建,JavaScript支持四种方法:

1.使用字面量(如上述几个例子中的中括号表达式)来直接创建数组对象。
2.使用Array()构造函数,不传入任何参数。在这种情况下,将创建一个空数组,其效果与[]等同。
3.使用Array()构造函数,传入一个正整数作为数组的长度。在这种情况下,JavaScript将预留相应的内存空间来存储这个数组。值得注意的是,此时数组的key都是没有被定义的,也即数组中没有任何成员。其效果与[,,,,]这样的写法等同
4.使用Array()构造函数,传入数组的成员。

实验:


复制代码 代码如下:
var z = new Array(10);//pre-allocate memory, but no index is defined yet.
console.log(3 in z);//false

var m = new Array(42, 33, 99, "test", {k:99});
console.log(m);//[42, 33, 99, "test", Object {k=99}]

在ECMAScript 5标准中,可以用Array.isArray()来判断某个对象是否是数组:
复制代码 代码如下:
Array.isArray([]);//true
Array.isArray({});//false

回复

使用道具 举报

4

主题

2万

回帖

316

积分

中级会员

Rank: 3Rank: 3

积分
316
发表于 2022-10-1 15:09:28 | 显示全部楼层
天天源码社区论坛
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

69

积分

注册会员

Rank: 2

积分
69
发表于 2022-10-19 16:02:49 | 显示全部楼层
呵呵呵呵呵呵呵a
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

58

积分

注册会员

Rank: 2

积分
58
发表于 2023-2-4 03:52:58 | 显示全部楼层
还有什么好东西没
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

87

积分

注册会员

Rank: 2

积分
87
发表于 2023-6-5 05:11:16 | 显示全部楼层
人都不在了啊 啊
回复 支持 反对

使用道具 举报

7

主题

2万

回帖

288

积分

中级会员

Rank: 3Rank: 3

积分
288
发表于 2023-6-13 04:38:13 | 显示全部楼层
。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

146

积分

注册会员

Rank: 2

积分
146
发表于 2023-9-16 18:26:18 | 显示全部楼层
刷刷刷刷刷刷刷刷刷刷刷刷刷刷刷
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-10-8 13:57:18 | 显示全部楼层
非常vbcbvcvbvcb
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-10-10 04:27:09 | 显示全部楼层
还可以不错
回复 支持 反对

使用道具 举报

3

主题

1万

回帖

50

积分

注册会员

Rank: 2

积分
50
发表于 2024-2-22 17:09:23 | 显示全部楼层
哈哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-2-4 22:03 , Processed in 0.069008 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表