【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章数组的更多相关文章

  1. 《JavaScript语言精粹》第二章-语法 简单笔记

    注释 JavaScript提供两种注释: /* */包围的块注释及//开头的行注释. 注释应该被优先用来提高程序的可读性,注释要精确地描述代码,没有用的注释比没有注释更糟糕. /* */块注释对于被注 ...

  2. 你想了解的《javaScript语言精粹》(三)

    # javaScript语言精粹  # 第三章 对象 - javaScript 数据类型     1. 基础数据类型         Number String Boolean Undefined N ...

  3. JavaScript语言精粹 笔记04 数组

    数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...

  4. 《JavaScript语言精粹》【PDF】下载

    <JavaScript语言精粹>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382204 内容简介 javascript曾是&q ...

  5. JavaScript 语言精粹笔记3

    方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...

  6. 《JavaScript语言精粹》小记

    一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...

  7. javascript语言精粹

    内容选自:<javascript语言精粹> 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'num ...

  8. Javascript 语言精粹 代码片段合集

    Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...

  9. JavaScript语言精粹笔记

    JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取 ...

  10. 《JavaScript语言精粹》之函数化

    写在前面 看到好多书评和读书笔记都说<JavaScript语言精粹>字字珠玑,名不虚传..当然,要看得懂才行 其实个人认为函数化部分不是很好,举的例子不是十分恰当,之前看不懂是因为被成功误 ...

随机推荐

  1. UIImage+Scale

    Scale a UIImage to any given rect keeping the aspect ratio Raw  UIImage+Scale.m   @implementation UI ...

  2. Co-Debugging JNI with Android Studio and Visual Studio

    Tutorials > Android > Integration with other tools > Co-Debugging JNI with Android Studio a ...

  3. parseint和parsefloat总结number。隐形转换

    parseint:会认识一些字符+.-.空格,其他的就会截止譬如23hudhchauch结果为:23,对于boollen类型不能转换为1或是0. number:是对整体的转换.对true的转换为1. ...

  4. 一个很好的通用 excel 导出工具类

    此类用主要 jxl +注解+流 实现扩展性很强,jxl性能会比poi好一点,值得我们学习. package oa.common.utils; import java.io.OutputStream; ...

  5. action参数绑定

    thinkPHP支持操作方法的参数绑定功能 action参数通过直接绑定URL中的变量作为操作方法的参数,可以简化方法的定义甚至路由的简析. 原理是把URL的中参数(不包括模块,控制器和操作名)和控制 ...

  6. 转:用​C​语​言​的​r​a​n​d​(​)​和​s​r​a​n​d​(​)​产​生​伪​随​机​数​的​方​法​总​结

    标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void): 从srand (seed)中指定的seed开 ...

  7. 最短路径算法专题2----Dijkstra

    这个算法适用于求单源最短路径,从一点出发,到其余个点的最短路径. 算法要点: 1.用二维数组存放点到点的距离-----不能相互到达的点用MAX代替距离 2.用dis数组存放源点到任意其他一点的距离-- ...

  8. Nginx配置proxy_pass【转载】

    在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走. 下面四种 ...

  9. Processes and Threads

    http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html Processes and Threads 译者署名: 呆呆大虾 译者微博: ...

  10. 2的幂次方(power)

    2的幂次方(power) 题目描述 任何一个正整数都可以用2的幂次方表示.例如:137=27+23+20同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为:2(7)+2(3 ...