《JavaScript权威指南》学习笔记 第四天 数组
昨天学习了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、数组的方法
- push
- unshift
- 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>
《JavaScript权威指南》学习笔记 第四天 数组的更多相关文章
- 读《JavaScript权威指南》笔记(四)--数组、函数
一.数组 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有 ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- JavaScript权威指南学习笔记6
这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...
- JavaScript权威指南学习笔记4
今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...
- Javascript权威指南学习笔记
第二章:词法结构 ;function a(){alert(2)};//前面的分号保证正确地语句解析 第三章:类型.值和变量 基本概念: 1.数据类型---能够表示并操作的值的类型叫做数据类型. 2.变 ...
- javascript权威指南学习笔记3
今天看到第四章,记录一下其中的几个点,俗话说:好记性不如烂笔头嘛. 4.9 in运算符和instanceof运算符 in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个 ...
- javascript权威指南学习笔记1
打开这本书,进入到javascript的世界.以前都是看各种视频,感觉什么收获也没有,反而弄得脑袋混乱,希望能够按照这本书的节奏掌握javascript这门语言,为我的前端学习打下基础. 学习前准备: ...
- javascript权威指南学习笔记2
Javascript语言核心(2~12章) 第三章:类型.值.变量 1.数字: overflow(Infinity, -Infinity).underflow(+0,-0) 非数字值:它和任何值都不相 ...
- JavaScript权威指南学习笔记5
下午在杭图回去前看了书中第二部分的13-17章,看的很粗,感觉大部分东西自己已经知道或者平时开发中不会用到,很多章节只是简单的翻了一下,没有仔细思考里面说到的道理,下面对各章节简单的记录下. 第13章 ...
- js权威指南学习笔记(四)对象
1.创建对象 (1).通过对象直接量的方式创建 说明:对象直接量是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来. 如: 5 5 ...
随机推荐
- Metatable让我从心认知了Lua(相知篇)
自从在公司和Lua第一次相遇之后,我的IT生涯从此也开启了另一个新篇... 起初并没有和Lua产生相遇时的那种电石火花般的怦然心动...但... 说实话虽然我的心没有因此触动但至少也不排斥...因为公 ...
- BASH 命令以及使用方法小结
最近工作中需要写一个Linux脚本,用到了很多BASH命令,为了防止以后忘记,在这里把它们一一记下来.可能会比较乱,随便看看就好了.如果有说的不对的地方也欢迎大家指正. 1,export VAR=.. ...
- 千呼万唤岂出来,写款软件不容易——Visual Entity 2.0 发布
在各位用户不继的催更中,终于完成了这次更新.Visual Entity这个软件发布于 2011年,这个软件完成后,便上班去了,也没有做什么推广工作.所以知道的用户并不多,尽管它是个非常好用.并且免费的 ...
- 深入学习JavaScript(二)
函数表达式和函数声明 函数声明 function 函数名(参数){函数体} 函数表达式 function 函数名(可选)(参数){函数体} 示例: function foo(){} // 声明,因为它 ...
- 基于FPGA的电压表与串口通信(上)
实验原理 该实验主要为利用TLC549采集模拟信号,然后将模拟信号的数字量通过串口发送到PC上上位机进行显示,使用到的TLC549驱动模块在进阶实验已经使用到了,串口模块在基础实验也已经使用到了,本实 ...
- nodejs实现的简单接口
var http = require('http'); var mysql = require('mysql'); var connection = mysql.createConnection({ ...
- 40-cut 简明笔记
从输入行中选取字符或者字段 cut [options] [file-list] cut 从输入行中选取字符或者字段,并将他们写到标准输出,字符和字段从1开始编号 参数 file-list 是文件的路径 ...
- 【原创·总结】影响sql查询性能的因素
1.表定义 (1)如果字符串字段是经常需要用到的,可以冗余,否则不要冗余 (2)经常需要作为where的查询条件的字段,可以建索引:但是过多的索引会影响写入时的性能 (3)合理定义字段的数据类型 ( ...
- oracle数据泵实现不同用户之间的导出导入
来源于:http://www.cnblogs.com/kevinsun/archive/2007/02/03/638803.aspx http://blog.sina.com.cn/s/blog_68 ...
- C++中的重载隐藏覆盖&&JAVA中的重载覆盖&&多态
class 类继承默认是private, struct 默认继承是public C++中的隐藏: 只要派生类中出现和基类一样的函数名,基类中的函数就会被派生类中的函数给隐藏(如果派生类和基类中的函数名 ...