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 相关文章推荐
一段实时更新的时间代码
Jul 07 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
js/jquery判断浏览器类型的方法小结
May 12 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
Mar 24 Javascript
Vue组件之Tooltip的示例代码
Oct 18 Javascript
JavaScript实现简单音乐播放器
Apr 17 Javascript
浅谈JavaScript闭包
Apr 09 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
Apr 26 Javascript
解决element-ui的下拉框有值却无法选中的情况
Nov 07 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
深入探究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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
PHP实现的sqlite数据库连接类
2014/12/12 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
理解JS绑定事件
2016/01/19 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
python dict remove数组删除(del,pop)
2013/03/24 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
如何利用python查找电脑文件
2018/04/27 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
简单的Python人脸识别系统
2020/07/14 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
工商管理毕业生推荐信
2013/12/24 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
2014年质检员工作总结
2014/11/18 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
公司催款律师函
2015/05/27 职场文书
暑期家教宣传单
2015/07/14 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
一文搞懂MySQL索引页结构
2022/02/28 MySQL