《javascript语言精粹》——第6章数组
【1】、数组字面量
var empty=[];
var num=[
'zero','one','two','three','four','five','six','seven','eight','nine'
];
document.write("<br/>"+empty[0]);undefined
document.write("<br/>"+num[0]);//zero
document.write("<br/>"+num.length+"<br/>"+empty.length);10,0
var misc=['string',true,[0,1],{object:true},NaN,null,undefined];//数组中可以是任意混合类型的值
document.write("<br/>"+misc.length);//7
【2】、长度
var myArr=[];
myArr.length;
document.write("<br/>"+myArr.length);
myArr[9999]=true;
document.write("<br/>"+myArr.length);//10000 数组最大整数属性名+1,并不一定等于数组中的属性个数
num.length=3;
num[num.length]='shi';
num.push("go");//添加到数组中
document.write("<br/>"+num);//zero,one,two,shi,go
【3】、删除
delete num[2];
document.write("<br/>"+num);//zero,one,,shi,go
num.splice(2,2);//第一个参数是数组中的序号也就是下标,从0开始数,第二个参数就是要删除的元素的个数
document.write("<br/>"+num);//zero,one,go ,对于大型的数组,效率不高,因为被删除的属性后面的每个属性都要被溢出,并且以一个新的键值重新插入
【4】、枚举:就是能够通过for 循环遍历出来
【5】、混淆的地方
数组跟对象的使用尝尝会弄混,所以,写了一个判断是否为数组的方法:
var is_array=function(value){
return value&&
typeof value=='object'&&
typeof value.length=='number'&&
typeof value.splice=='function'&&
!(value.propertyIsEnumerable('length')); //length能够通过for in循环遍历出来,对于所有数组来说,返回的都是false
};
【6】、方法
Array.method("reduce",function(f,value){
var i;
for(i=0;i<this.length;i++)
{
value=f(this[i],value);//value是个临时变量,用来临时保存最后相加的值,然后在跟后面一个值相加
}
return value;
});
var data=[4,8,15,16,23,42];
var addNum=function(a,b){
return a+b;
};
var mult=function(a,b){
return a*b;
};
var sum=data.reduce(add,0);
var product=data.reduce(mult,1); document.write("<br/>相加:"+sum+"<br/>相乘:"+product);//相加:108 相乘:7418880
data.total=function(){ //数组是对象,所以,可以给一个单独的数组添加方法
return this.reduce(add,0);
};
document.write("<br/>"+data.total());//108
【7】、维度
//一维数组
Array.dim=function(a,b){
var c=[],i;
for(i=0;i<a;i++){
a[i]=b;
}
};
var arr1=Array.dim(10,0);
//二维数组或者是数组的数组
var maxrix=[
[0,1,2],
[3,4,5],
[6,7,8]
];
document.write("<br/>"+maxrix[2][2]);//8
Array.maxrid=function(m,n,inital){
var a,i,j,mat=[];
for(i=0;i<m;i++)
{
a=[];
for(j=0;j<n;j++){
a[j]=0;
}
mat[i]=a;
}
return mat;
};
var myMaxrix=Array.maxrid(4,4,0);
document.write("<br/>"+myMaxrix[3][3]);//0
Array.identity=function(n){//恒等矩形
var i,mat=Array.maxrid(n,n,0);
for(i=0;i<n;i++){
mat[i][i]=2;
}
return mat;
};
document.write("<br/>"+Array.identity(4)[3][3]);//2
《javascript语言精粹》——第6章数组的更多相关文章
- 《JavaScript语言精粹》第二章-语法 简单笔记
注释 JavaScript提供两种注释: /* */包围的块注释及//开头的行注释. 注释应该被优先用来提高程序的可读性,注释要精确地描述代码,没有用的注释比没有注释更糟糕. /* */块注释对于被注 ...
- 你想了解的《javaScript语言精粹》(三)
# javaScript语言精粹 # 第三章 对象 - javaScript 数据类型 1. 基础数据类型 Number String Boolean Undefined N ...
- JavaScript语言精粹 笔记04 数组
数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...
- 《JavaScript语言精粹》【PDF】下载
<JavaScript语言精粹>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382204 内容简介 javascript曾是&q ...
- JavaScript 语言精粹笔记3
方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...
- 《JavaScript语言精粹》小记
一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...
- javascript语言精粹
内容选自:<javascript语言精粹> 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'num ...
- Javascript 语言精粹 代码片段合集
Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...
- JavaScript语言精粹笔记
JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取 ...
- 《JavaScript语言精粹》之函数化
写在前面 看到好多书评和读书笔记都说<JavaScript语言精粹>字字珠玑,名不虚传..当然,要看得懂才行 其实个人认为函数化部分不是很好,举的例子不是十分恰当,之前看不懂是因为被成功误 ...
随机推荐
- MyBaits 错误分析
错误原因:在DAO的映射文件中,在映射标签中的type类型写成DAO类了,应该写成javaBean
- sqlserver2008行锁
select * from tablename WITH (UPDLOCK) where Id=#value#
- 关于一些url中传递参数有空格问题
1.关于一些url中传递参数有空格问题: url.replace(/ /g, "%20") 从上面的例子中可以看到可以用:replace(/ /g, "%20" ...
- Android简单逐帧动画Frame的实现(二)
Android简单逐帧动画Frame的实现 Android简单逐帧动画Frame的实现 1.逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影. 2.实现步骤: 1. 在工程里 ...
- http://www.iteye.com/job/topic/1133159
Lucene 的索引体系是一个写独占,读共享的结构,这意味着,我们在使用多线程进行添加索引时,性能并不会得到明显的提升,所以任何时刻只能有一个线程对索引进行写 入操作,而保障这个操作的安全性则是来自于 ...
- eclipse,android Localization (Internationalization) 安卓本地化(国际化)
1.创建新的资源文件,名字保持一致.提示"已存在",继续. 2.使用“语言”作为识别器,然后选择相应的语言代码.Tips:其他的适配,如国家.屏幕大小等,也是通过这里的识别器实现适 ...
- Mysql主从备份、主主备份
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- thinkphp整合系列之rbac的升级版auth权限管理系统demo
权限管理基本是作为网站的标配了: 除非是像博客这类个人使用的:否则权限管理的重要性不言而喻: 今个就来写写auth权限管理: thinkphp已经内置了auth权限类位于:/ThinkPHP/Libr ...
- MySQL与MongoDB之SQL语法对比
- Android的Activity跳转动画各种效果整理
Android的Activity跳转就是很生硬的切换界面.其实Android的Activity跳转可以设置各种动画,本文整理了一些,还有很多动画效果,就要靠我们发挥自己的想象力 大家使用Android ...