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 相关文章推荐
IE autocomplete internet explorer's autocomplete
Jun 30 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
Oct 17 Javascript
jquery星级插件、支持页面中多次使用
Mar 25 Javascript
面向对象Javascript核心支持代码分享
May 23 Javascript
javascript与cookie 的问题详解
Nov 11 Javascript
javascript 函数及作用域总结介绍
Nov 12 Javascript
js获取url中&quot;?&quot;后面的字串方法
May 15 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
JavaScript实现数字数组按照倒序排列的方法
Apr 06 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
浅谈js闭包理解
Mar 28 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 sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP进程同步代码实例
2015/02/12 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
PHP反射基础知识回顾
2020/09/10 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
web 页面分页打印的实现
2009/06/22 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
python函数形参用法实例分析
2015/08/04 Python
python实现雨滴下落到地面效果
2018/06/21 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python温度转换华氏温度实现代码
2020/12/06 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
Servlet如何得到服务器的信息
2015/12/22 面试题
《美丽的公鸡》教学反思
2014/02/25 职场文书
工地宣传标语
2014/06/18 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
歌咏比赛主持词
2015/06/29 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android