1.数组的定义:

  (1)字面量:  var arr = [1, 2, 3];

    (2) new:   var arr = new Array(1, 2, 3);(using new and don't using new is same) (注意:当括号内只有一个数字值,若为整数则该数字表示数组的长度而不是数组中的元素,若为浮点数则报错)

2.数组的读和写:

  (1) 不可溢出输出的长度读,否则返回undefined,但不报错  var arr = new Array(1, 2, 3);  document.write(arr[4]);//返回undefined

  (2) 可以溢出写    var arr = new Array(1, 2, 3);   arr[5] = 6; document.write(arr);//返回1,2,3,,,6

3.数组的一些方法:

  (1) 改变原数组的方法: arr.方法()

    a. reverse  翻转数组    var arr = [1, 2, 3]; arr.reverse(); document.write(arr);//3,2,1

    b. push 在数组末尾一次性添加一个或多个个新元素  var arr = new Array(1, 2, 3); arr.push(4, 5);

    c. pop 在数组末尾剪切一个元素,并将之返回  var arr = new Array(1, 2, 3); arr.pop(); document.write(arr);//1,2

    d. shift 在数组头部剪切一个元素,并将之返回

    e. unshift 在数组头部一次性添加一个或多个元素

    f. splice 在数组的某个位置,删除自定义个数目的元素,并可在剪切的位置添加新元素  var arr = new Array(1, 2, 3, 4); arr.splice(2, 2, 10, 11);//从arr数组的第二个位置开始删除两个元素,并将10和11一次添加到删除的位置。注意:删除后可添加可不添加

    g. sort 将数组的元素排序,默认为按ASCII码排序,也可默认为升序。该方法的排序方式自定义:

      

     arr.sort(function (a, b){
返回 负数;//a在b前面
返回 正数;//a在b后面
})     一个有关sort的考试题:利用sort将一个排好序的数组随机乱序:
    利用Math.random()产生0到1之间不包括0和1的随机小数和sort来乱序
      arr.sort(function(a, b){
        return Math.random() - 0.5;
      })

  (2)不可改变数组的方法:

    a. concat  arr1.concat(arr2);将arr2接到arr1之后形成一个新数组并返回,arr1 和arr2原数组不变

    b. join 将数组中各元素用join括号中参数连接形成一个String并返回,原数组不变   var arr = [1, 2,3]; var str = arr.join('-');document.write(str);//1-2-3

      

 经验:连接多个字符串时,用join会比加号更效率。
步骤:1.将要相连的字符串弄到一个数组中
2.利用join来连接,join的括号中的形参为‘’(空字符串);

    c. split 通过split括号中形参来分隔字符串,并将之形成一个数组返回,和join有点相反的感觉

       var s ='1-2-3-4'; var arr = s.split('-'); document.write(arr);//1,2,3,4

4.类数组:我的理解为因为某些方法的运行原理,可以利用对象来模拟数组的效果

  (1)、可以利用属性名模拟数组的特性
  (2)、可以动态的增长length属性

  (3)、如果强行让类数组调用push方法,则会根据length属性值的位置进行属性的扩充。

    

          var arrobj = {
'0' : 1,
'1' : 2,
'2' : 3,
'length' : 3,
'push' : Array.prototype.push
}
arrobj.push(4);
document.write(arrobj.length);//
document.write(arrobj[3]);//4   原因:是因为对象的属性中有length的存在 和 push等方法的内部运行原理。
       Array.prototype.push = function (num) {           this[this.length] = num;

           this.length++;
            .....
        }

  find:1.push属性没必要自己添加,可以直接用call方法来借用数组的方法,例如Array.prototype.push.call(arrobj,arg1,arg2,arg3...);
      2.length如果初始值为0的话,可以不用手动添加设定,当你使用过一次Array.prototype.push.call(arrobj.arg1, arg2, arg3...),length属性会自动添加,并变为相应值,即1。
             

5.扩展

  (1)try{}catch(){}finally{}

    将可能产生错误代码放于try中,当产生错误时,会将错误信息返回发哦catch括号中形参中,catch的花括号中是错误的处理方法。

      a. 正常JS代码当某行有错误,则该行之下该代码都不会执行,但try中代码产生错误后,不会影响try之外的代码的执行。

      b. 只有try中代码产生错误时,catch中处理错误代码才会执行,否则不会执行。而finally中代码不管是否有错误,最终都会执行,但经常finally可省略不写.

  (2) ECMAScript

    es3.0

    es4.0

    es5.0//在代码前加入“ 'use strict';”这个字符串则其之后的代码处于严格模式下  

    处于严格模式下的一些限制:

      a. 不支持with,with可改变作用域链

        

       var obj = {a : 123}
function test(){
//'use strict'若在此添加左端字符串,则报错with不可使用
var a = 234;
var b = 1;
var
with(obj){//将obj作为其作用域链的最顶端,即将obj放于执行上下文的 最顶端,优先查找obj
document.write(a);//
document.write(b);//
}
with(documnet){
write(a);//
write(b);//
}
}

        b. 不支持arguments.callee

        c. 不支持caller

        d. 变量赋值前必须声明,否则报错

        e. 局部this必须被赋值

        function test(){
document.write(this);//非严格模式下返回window,但严格模式下返回的是undefined
} test.call(undefined/null);//window
test.call(undefined/null);//严格模式下为undfined/null

        f. 参数名字不可重复

    现在是es6.0,其中有类的存在,类似java,功能更强大

6.数组分类:

  (1)数值数组:其索引值为数字

  (2)关联数组:其索引值不一定为数组,还包括字符串。

  (3)稀疏数组:数组元素的索引不是连续的,他们之间可以有空缺。(注意空缺位置是没有值的,而不是undefined,可用 0 in arr 来检测,返回boolean值)

    

 稀疏数组的创建:
1. var arr = new Array(3);
2. var arr = []; arr[3] = 3;/ var arr = [,,]; / var arr = [1,,3];
 满足length > 数组元素数目即可。

  (4)非稀疏数组:数组元素的索引是连续的,之间无空缺。

JS之数组的更多相关文章

  1. Js删除数组重复元素的多种方法

    js对数组元素去重有很多种处理的方法,本篇文章中为网络资源整理,当然每个方法我都去实现了:写下来的目的是希望自己活学活用,下次遇到问题后方便解决. 第一种 function oSort(arr){ v ...

  2. js去除数组重复项

    /** * js去除数组重复项 */ //方法一.使用正则法 // reg.test(str),匹配得到就返回true,匹配不到返回false var arr = ["345",& ...

  3. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  4. 探讨js字符串数组拼接的性能问题

    这篇文章主要介绍了有关js对字符串数组进行拼接的性能问题,字符串连接一直是js中性能最低的操作之一,应该如何解决呢?请参看本文的介绍 我们知道,在js中,字符串连接是性能最低的操作之一. 例如: 复制 ...

  5. js之数组,对象,类数组对象

    许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...

  6. js对数组的操作函数

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手, ...

  7. JS 索引数组、关联数组和静态数组、动态数组

    JS 索引数组.关联数组和静态数组.动态数组 数组分类: 1.从数组的下标分为索引数组.关联数组 var ary1 = [1,3,5,8]; //按索引去取数组元素,从0开始(当然某些语言实现从1开始 ...

  8. JS 中数组的排序和去重

    在 PHP 中,数组有很多排序方法,不过其他语言的数组中大概是不会像 JS 的数组一样,包罗万象,啥都通吃的.所以 JS 的数组排序情况就略多一些了. 简单粗暴的排序: 赤果果的sort: var   ...

  9. JS去除数组中重复值的四种方法

    JS去除数组中重复值的四种方法 1 /// <summary>            o[this[i]] = "";  }      }       newArr.p ...

  10. [记录] js判断数组key是否存在

    数组中判断key是否存在 可以通过arrayObject.hasOwnProperty(key)来进行判断数组key是否存在,返回的是boolean值,如果存在就返回true,不存在就返回false ...

随机推荐

  1. 分享C#原生ID(流水号)生成功能实现

    ///, , )).TotalMilliseconds.ToString(")); /// <summary>         ///         /// </summ ...

  2. iOS代码实践总结

    转载地址:http://mobile.51cto.com/hot-492236.htm 最近一个月除了专门抽时间和精力重构之外,还有就是遇到需要添加功能的模块的时候,由于项目中的代码历史因素比较多,第 ...

  3. iOS学习之UI可视化编程-XIB

    一.Interface Builder可视化编程 1.Interface Builder简介: GUI:图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是 ...

  4. easyui 布局自适应

    最近在把以前写的一个项目改成用easyui做前端.过程中遇到了不少问题.其中一个就是datagrid不能很好的布局.想了好多办法都有局限.最后想到会不会是布局(easyui-layout)的问题,经过 ...

  5. jQuery插件实例一:年华时代插件Alert对话框

    在工作中使用jQuery插件相信对于程序员来说非常普遍,在网络上也有很多优秀的插件可供大家使用,功能非常强大.在之前用过的一些插件中,有些太过追求功能的强大和可配置性,造成使用的复杂度上升.个人认为与 ...

  6. Android实现SQLite数据库联系人列表

    Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...

  7. postmortem report of period M1

    一.设想和目标 1.我们的软件主要要解决学长设计的学霸系统中视频及文档的浏览功能问题. 2.时间相对充裕.不过对于我们这些零基础的人来说还是比较困难. 3.我们团队中不同意见通常会进行进一步讨论,说出 ...

  8. BICEP单元测试计划-四则运算-测试

    一.6个值得测试的具体部位,他们能够提高你的测试技巧 Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制 ...

  9. 创建ubuntu软件源

    缘起:虚拟机需要安装一些文件,但是直接从外网下载比较慢,而且安装iso包中是有这些软件的,所以创建一个ubuntu  apt server ubuntu 12.04, 本机192.168.0.124, ...

  10. Careercup - Microsoft面试题 - 6314866323226624

    2014-05-11 05:29 题目链接 原题: Design remote controller for me. 题目:设计一个遥控器. 解法:遥控什么?什么遥控?传统的红外线信号吗?我只能随便说 ...