JavaScript中的数组特性介绍


Posted in Javascript onDecember 30, 2014

与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
Javascript 相关文章推荐
JavaScript 未结束的字符串常量常见解决方法
Jan 24 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 03 Javascript
JS中prototype关键字的功能介绍及使用示例
Jul 21 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
Aug 27 Javascript
移动节点的jquery代码
Jan 13 Javascript
javascript正则匹配汉字、数字、字母、下划线
Apr 10 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
Jul 02 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
vue.js,ajax渲染页面的实例
Feb 11 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
Aug 12 Javascript
webpack dll打包重复问题优化的解决
Oct 10 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
JavaScript中数组成员的添加、删除介绍
Dec 30 #Javascript
JavaScript 实现打印,打印预览,打印设置
Dec 30 #Javascript
JavaScript中的数组操作介绍
Dec 30 #Javascript
jQuery中:first选择器用法实例
Dec 30 #Javascript
JavaScript中的类数组对象介绍
Dec 30 #Javascript
JavaScript中的方法调用详细介绍
Dec 30 #Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 #Javascript
You might like
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
JavaScript中的排序算法代码
2011/02/22 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
通过python爬虫赚钱的方法
2019/01/29 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
电气专业推荐信范文
2013/11/18 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
高考寄语大全
2014/04/08 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
工作年限证明范本
2015/06/15 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python