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 相关文章推荐
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
jquery常用操作小结
Jul 21 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
Aug 16 Javascript
TypeOf这些知识点你了解吗
Feb 21 Javascript
webpack 1.x升级过程中的踩坑总结大全
Aug 09 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
Sep 04 Javascript
vue项目部署到Apache服务器中遇到的问题解决
Aug 24 Javascript
简单的React SSR服务器渲染实现
Dec 11 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
Feb 05 Javascript
微信小程序开发(二):页面跳转并传参操作示例
Jun 01 Javascript
js实现磁性吸附的示例
Oct 26 Javascript
解决ant Design Search无法输入内容的问题
Oct 29 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
比较详细PHP生成静态页面教程
2012/01/10 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP生成随机密码类分享
2014/06/25 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
VueJs监听window.resize方法示例
2018/01/17 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
应聘医学检验人员自荐信
2013/09/27 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
人事部专员岗位职责
2014/03/04 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
原生JS实现分页
2022/04/19 Javascript