Javascript数组Array基础介绍


Posted in Javascript onMarch 13, 2016

Javascript,一门神奇的语言,它的数组也同样独特。我们要去其糟粕,取其精华,把常用的最优实践总结出来。如有错误,请指出。

javascript数组是一种类数组的对象,拥有对象的特性。当属性名是小而连续的整数时,应该使用数组,否则,使用对象。

数组来源

所有的数组都是Array构造出来的,我们来测试一下constructor这个属性。

var arr = [];
arr.constructor === Array; // true
arr.constructor === Array.prototype.constructor; // true

创建数组

//数组字面量方式
var arr1 = [1, 2, 3]; // [1,2,3]

//构造函数方式
var arr2 = new Array();    // [] 空数组
var arr3 = new Array('9');   // ["9"] 一个字符串元素
var arr4 = new Array(9);    // [] 数组长度length为9
var arr5 = new Array([9]);   // [[9]] 相当于二维数组
var arr6 = new Array(1, 2, 3); // [1, 2, 3]
var arr7 = new Array(1, function f(){}, {o : 6}, null,undefined,true);
// 数组可以存储任意混合数据类型

由于arr4的方式,当只有一个数字参数传递到Array的构造函数中,构造函数会返回设置了length属性的空数组。所以推荐使用数组字面量方式,短小而简洁。

检测对象是否为数组

var arr1 = [1, 2, 3];
typeof(arr1); // object

众所周知,typeof不能正确检测类型。

arr1 instanceof Array; //true

instanceof 方式在一个网页内是没有问题,一旦嵌套其他网页,便存在两个全局作用域,互相调用时的检测就会出问题。

Array.isArray(arr1); // true

Array.isArray() 是ECMAScript5 新增的方法,没有缺陷。唯一的问题是ie8浏览器不支持,ie9浏览器在严格模式下也不支持。

Object.prototype.toString.apply(arr1).slice(8, -1); // Array

最后一种方式是检测类型的最好方法。

数组长度

数组的length也是它的属性,增大length也不会发生越界错误。
length值等于数组最大的整数属性名加1。

var arr1 = [];
arr1[9] = 1; // 长度为10,只包含一个元素的数组

设小值将将会把属性名大于等于length的属性删除。
如果将length值设为0,相当于清空数组。

var arr2 = [1, 2, 3, 4, 5];
arr2.length = 3; // [1, 2, 3]
arr2.length = 0; // []

数组遍历

遍历数组不要使用for in循环遍历数组,因为for in会遍历原型链上的所有属性,但我们并不需要这么多。推荐使用for循环的方式。

var arr1 = [1, 2, 3];
arr1.test = 9;

//for in 方式
for(var prop in arr1){
  cosole.log(prop, arr1[prop]);
}
// 输出如下
// 0 1
// 1 2
// 2 3
// test 9

//for循环方式
for(var i = 0, len = arr1.length; i < len; i++){
  console.log(arr1[i]);
}
//输出如下
// 1
// 2
// 3

我们看到for in方式多出了一个test值,可以使用hasOwnProperty函数排除,但那会比for循环的方式慢很多。
缓存数组长度很有必要的一步,每次访问是有性能开销的(最新的浏览器在这方面做了优化)。

小结

简单介绍了Array的相关基础知识,到这里也算是能对Array有更全面的理解了。下一篇介绍Array的方法。

Javascript虽然有很多不太容易弄懂的地方,随着长时间的学习,我已经慢慢地爱上它了(因为现在没有妹子让我爱)。

Javascript 相关文章推荐
兼容Mozilla必须知道的知识。
Jan 09 Javascript
javascript同步Import,同步调用外部js的方法
Jul 08 Javascript
Javascript 模式实例 观察者模式
Oct 24 Javascript
基于node.js的快速开发透明代理
Dec 25 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 Javascript
jQuery取得select选择的文本与值的示例
Dec 09 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
JavaScript数据类型详解
Apr 01 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
JavaScript继承与多继承实例分析
May 26 Javascript
vue使用ajax获取后台数据进行显示的示例
Aug 09 Javascript
js实现简易计算器小功能
Nov 18 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
Mar 13 #Javascript
简单谈谈json跨域
Mar 13 #Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
Mar 13 #Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 #Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 #Javascript
Node.js的Express框架使用上手指南
Mar 12 #Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
Mar 11 #Javascript
You might like
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
jquery 问答知识整理
2010/02/11 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
python的dict判断key是否存在的方法
2020/12/09 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
学校办公室主任职责
2013/12/27 职场文书
保护环境建议书
2014/03/12 职场文书
安全生产大检查方案
2014/05/07 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
远程教育学习心得体会
2016/01/23 职场文书
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫