《JavaScript权威指南》学习笔记 第四天 数组
2015-11-28 00:46
537 查看
昨天学习了js的对象,了解了js的原型链。在js里面万事万物皆对象,只不过一些原始类型要经过包装对象的包装才能暂时变为对象。数组的本质是什么呢?数组其实就是一组数,也就是链表。每个数只是这个链表上的一个位置。js的对象属性值可以是字符串,但是js的数组对象的属性值只能是数字。经常称为索引(index)。在使用的时候可以把数组当成对象来使用。
1、创建数组的方式
正如茴香豆的茴有六种写法,我们的js对象也有三种的创建方式。如果你看过昨天的博客就会,了解到创建对象的三种方式。对象直接量
<script> var arr = ['jack','rose','suse']; <script>
使用包装对象
<script> var arr = new Array('jack','rose','suse'); </script>
使用对象原型创建
<script> var arr = Array.create() </script>
2、稀疏数组与稠密数组
稀疏数组稀疏数组就是指数组的索引(index),稀疏数组的索引并不是连续的,而是跳跃的,形如下面的代码。
<script> var test = ['name',,'jack','suse']; console.dir(test); </script>
稠密数组
就是数组的索引是连续的,实际上我们平时使用的数组差不多都是稠密数组,在数组的使用上与稀疏数组并没有什么分别。
3、数组的遍历
数组的遍历还是使用for循环的比较多一点。我之前还使用过for in循环,不过for in循环用在对象里面更多一点。4、数组的方法
pushunshift
pop
shift
join
reverse
sort
concat
slice
splice
toString
map
filter
every
some
reduce
以下为上面数组方法的例子,有兴趣的可以对照着看一下,最好是自己坐下demo,才能记得住。
<script> //push 用来在数组尾部最后一位插入元素 var arr = ['rover','jack','rose','suse']; arr.push('javascript'); console.dir(arr); //unshift 在数组的头部插入一个元素 arr.unshift('first'); console.dir(arr); //shift 删除数组头部的第一个元素。 arr.shift(); console.dir(arr); //pop 删除数组尾部的最后一个元素 arr.pop(); console.dir(arr); //reverse 返回一个逆序的数组。 //reverse并不返回一个新的数组,而是直接在原数组上修改。 var arrReverse = [1,2,3,4,5,6]; arrReverse.reverse(); console.dir(arrReverse); //sort 排序函数 //当sort没有参数的时候,默认是按照英文字母来排序的。 //如果数组里面是一组数,则需要传入排序的函数。 var str = ['cup','apple','dog','banana']; str.sort(); console.dir(str); var num = [45.6,13.99,47.66,32,99,77]; //这里会先把数字转换成字母表顺序。 num.sort(function(a,b){ return a-b }); console.dir(num); //join 把数组切割成字符串, var res = str.join('|'); console.dir(res); //concat 相当于php里面array_merge函数了,拼合两个数组。 //不能去重,有点麻烦。 var arr1 = ['apple','banana']; var arr2 = ['cat','dog']; res = arr1.concat(arr2); console.dir(res); res.concat(['dog','fly']); res.concat(['dog','fly']); console.dir(res); //slice 不包括最后一位。 var tmparr = ['apple','banana','cat','dog']; res = tmparr.slice(0,1); console.dir(res); res = tmparr.slice(0,2); console.dir(res); console.dir(tmparr); //splice var sparr = ['apple','banana','cat','dog','eyy','fly','guy']; msg = sparr.splice(1); console.dir(msg); console.dir(sparr); //从以上两个打印的信息来看,splice是会在原来的数组进行处理的,会截取原数组的值。 //如果只有一个参数,则是从数组的该索引处开始往后截取。 var sparr1 = ['apple','banana','cat','dog','eyy','fly','guy']; //第一个参数为从索引为1处开始截取,第二个参数为一共截取几个。 msg = sparr1.splice(1,2); // console.dir(msg); var sparr2 = ['apple','banana','cat','dog','eyy','fly','guy']; msg = sparr2.splice(1,2,'香蕉','猫猫'); console.dir(msg); console.dir(sparr2); //如果有第三个参数,则后续的参数为插入参数 //map 这个会对数组中的每一个值应用函数。 var marr = [1,2,3,4]; msg = marr.map(function(a){return a+1;}); console.dir(marr); console.dir(msg); //every 只有数组中所有的元素都满足条件,才返回true var earr = [1,2,3,4]; msg = earr.every( function(a){ return a > 3; }); console.dir(msg); //some 只要数组中有元素能满足条件就返回true var somearr = [1,2,3,4]; msg = somearr.some(function(a){ return a > 3; }); console.dir(msg); //reduce 使用指定的函数将数组元素折叠 var rarr = [1,2,3,4]; msg = rarr.reduce(function(x,y){ return x+y; }); console.dir(msg); var rarr1 = [1,2,3,4]; msg = rarr1.reduce(function(x,y){ return (x>y)?x:y; }) console.dir(msg); </script>
5、数组判断
用这个方法还是比较准确的。
<script> msg1 = Array.isArray([1,2]); msg2 = Array.isArray({name:'jack'}); console.dir(msg1); console.dir(msg2); </script>
相关文章推荐
- jsp内置对象有哪些?作用是什么
- jsp有哪些内置对象?作用分别是什么?
- Javascript编程中几种继承方式比较分析
- Javascript编程之继承实例汇总
- Javascript页面跳转常见实现方式汇总
- JavaScript实现页面跳转的几种常用方式
- javascript 闭包
- 南大软院大神养成计划--js
- 【JavaScript】页面刷新location.reload和location.replace的区别
- js的闭包原理理解
- javascript判断数据类型
- json 和 pickle
- javascript函数中的匿名函数
- jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
- JavaScript设计模式 - 策略模式
- javascript的几种继承方式
- javascript变量的作用域
- javascript中的screen对象
- Cookies学习
- javascript的navigator对象