数组(Array对象)

数组就是一组数据.

在JavaScript中没有数组这种数据类型.数组时对象创建的.

  • 键(下标): 用于区分数组中不同数值的标志就是键,初始键为0.

    • 以数字作为下标的键,这种数组称之为索引数组.
    • 以字符串作为下标的键,这种数组称之为关联数组
    • 注意: 在JavaScript中只有索引数组,y没有关联数组,必须是从0开始连续的索引数组!
  • 值:每个键对应的数据就是值.
  • 键值对:键+值 就是键值对

数组的操作

创建数组方法

  • new Array();

    • var 变量 = new Array() ; 创建一个空数组
    • var 变量 = new Array(值,值...) ; 创建具有指定元素的数组
    • var 变量 = new Array(整数); 创建具有指定长度的数组
  • 使用对象字面量

    • var 变量 = []; 创建一个空数组
    • var 变量 = [值,值...];创建具有指定元素的数组
    • var 变量 = [整数] ; 创建一个指定整数元素的数组,并不是长度!~

添加与修改数组元素

  • 数组变量[数组变量.length] = 值;

    a[a.length] = 1;//添加

  • 数组变量[指定下标] = 新值;

    a[0] = 1;修改

  • 数组变量[超过当前数组长度的数值] = 值;

    a = [1,2,3];

    a[5] = 5;

    输出:[1, 2, 3, empty × 2, 5]

删除数组元素

  • delete 数组变量[指定下标];

    deldet a[0];

  • 注意: 这种方式仅仅可以删除数组的元素值,不可以删除键,删除操作之后,数组的长度保持不变。如果想彻底删除元素需要使用splice这个方法。

使用数组元素

  • 数组变量[指定下标] ;

遍历数组元素

  • 第一种
    var x = [1,2,3];
    for (var i=0;i<x.length;i++){
    console.log(x[i]);
    }
  • 第二种
    var x = [1,2,3];
    for (var i of x){
    console.log(i);
    }

    输出均为以下

    1
    2
    3

多维数组

通俗解释如下

  • 一维数组:

    如果一个元素中的所有值都不是数组,那么这个数组就是一个一维数组.

  • 二维数组:

    如果一个一维数组的元素中包含一维数组,那么这个数组就是二维数组

  • 三维数组:

    如果一个一维数组的元素中包含二维数组,那么这个数组就是三维数组

  • 多维数组:

    如果一个数组的维度超过三维,统称为多维数组

  • 多维数组的访问操作:

    数组变量[键][键]...

数组相关的函数

concat()

  • 连接数组元素
  • 格式:

    新变量 = 数组变量.concat(值,值...)

    var b = a.concat(a, 1, "x");

  • 参数值,可以是正常数值也可以是数组类型,都可以连接。
  • 给数组就在后面添加所有数组元素,给普通数值就添加普通数值

join()

  • 使用字符将数组元素连接成一个字符串,默认为,
  • 格式:

    新变量 = 数组变量.join(制定字符串)

    var b = a.join("");//""空字符就等于没有连接字符串

pop()

  • 在数组的结尾处弹出一个元素(直接改变原有数组)
  • 格式:

    结果变量 = 数组变量.pop();

    var b = a.pop();

  • 注意:该方法直接操作原有数组.返回值为弹出的元素

push()

  • 在数组的结尾处添加元素(直接改变原有数组)
  • 格式:

    结果变量 = 数组变量.push(值,值..)

    var b = a.push("1", "2");

  • 注意:该方法直接操作原有数组.返回值为添加后的数组长度

shift()

  • 在数组的开头移除一个元素(直接改变原有数组)
  • 格式:

    结果变量 = 数组变量.shift();

    var b = a.shift();

unshift()

  • 在数组的开头添加元素(直接改变原有数组)
  • 格式:

    结果变量 = 数组变量.unshift(值,值...)

    var b = a.unshift("1", "2");

reverse()

  • 数组倒转方法
  • 格式:

    结果变量 = 数组变量.reverse();

    var b = a.reverse();

sort()

  • 数组排序方法
  • 字符串排序,使用ascii进行排序操作.
    • 格式:

      结果变量 = 数组变量.sort();

      var b = a.sort();

  • 数字排序,使用数字大小排序
    • 格式:

      结果变量 = 数组变量.sort(回调函数);

      var b = a.sort(c);

    • 回调函数的格式要求:
      • 必须传入2个参数.
      • 必须返回正数,负数或者0;

slice()

  • 切割数组,并且返回其中的一段
  • 格式:

    结果变量 = 数组变量.slice(开始下标,结束下标);

    var b = a.slice(1,3);

  • 注意: 包含开始位置的元素,但是不包含结束位置的元素
  • 其中参数为位置参数,正数表示从前向后数,负数从后向前数.

splice()

  • 数组万能操作方法(直接改变原有数组)
  • 在指定位置添加元素

    结果变量 = 数组变量.splice(制定位置,0,新增元素..)

    var b = a.splice(1,0,"ABC");

  • 在制定位置删除元素

    结果变量 = 数组变量.splice(制定位置,删除个数);

    var b = a.splice(1,2);

  • 在制定位置替换元素

    结果变量 = 数组变量 .splice(制定位置,删除个数,新增元素)

    var b = a.splice(1,2,"ABC","DEF");

类数组对象

在JavaScript中有一种性质与数组相似特殊的对象,我们称之为类数组对象,最常见的便是 argumengs对象。

定义

  • 可以通过索引访问元素,并且拥有 length 属性;
  • 没有数组的其他方法,例如 push , forEach , indexOf 等。

举例

类数组

    var arrLike = {
0: 'Java',
1: 'Python',
2: 'PHP',
length: 3
}

同款数组

var arr = ["Java", "Python", "PHP"];

对比数组

  • 类数组对象在访问、赋值、获取长度上的操作与数组是一致的

    • 访问

      console.log(arr[0]); // Java

      console.log(arrLike[0]); // Java

    • 赋值

      arr[0] = 'JavaScript';

      arrLike[0] = 'JavaScript';

    • 获取对象的长度

      console.log(arr.length); // 3

      console.log(arrLike.length); // 3

  • 类数组对象与数组的区别是类数组对象不能直接使用数组的方法

    • 类数组对象使用数组方法时会报错

    arrLike.push("C++"); // Uncaught TypeError: arrLike.push is not a function

转换

有时候我们需要让类数组有数组的特性,这时候就需要转换,可以是直接转换也可以间接转换。

间接

通过 Function.call 或Function.apply 方法

  • Function.call
Array.prototype.push.call(arrLike, 'C++');
console.log(arrLike);
// { '0': 'Java', '1': 'Python', '2': 'PHP', '3': 'C++', length: 4 }
  • Function.apply
Array.prototype.push.apply(arrLike, ['C++']);
console.log(arrLike);
// { '0': 'Java', '1': 'Python', '2': 'PHP', '3': 'C++', length: 4 }

直接

  • Array.prototype.slice 将类数组转换为数组

Array.prototype.slice.call(arrLike,0);

Array.prototype.slice.apply(arrLike,0);

  • Array.prototype.splice 将数组转换为类数组

Array.prototype.splice.call(arrLike,0);

Array.prototype.splice.apply(arrLike,0);


JavaScript 浅析数组对象与类数组对象的更多相关文章

  1. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  2. [Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

    示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bi ...

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

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

  4. python-面向对象-02_类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1.1 类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统 ...

  5. 浅谈JavaScript和DOM中的类数组对象

    JavaScript是一门弱类型语言,它的数据类型分为两大类:简单数据类型(5种:Undefined.Null.Boolean.Number.String)和复杂数据类型(1种:Object).Obj ...

  6. JavaScript、ES6中的类和对象

           面向对象可以用于描述现实世界的事物,但是事物分为具体的(特指的)事物和抽象的(泛指的)事物. 面向对象思维的特点: 1.抽取(抽象)对象共有的属性和行为组织(封装)成一个类(模板) 2. ...

  7. dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题

    在 C# 的语法,可以提供自动将某个类的数组自动转这个类的基类数组的方法,但是这样的转换在 Resharper 会提示 Co-variant array conversion 这是什么问题? 在 C# ...

  8. js面向(基于)对象编程—类(原型对象)与对象

    JS分三个部分: 1. ECMAScript标准--基础语法 2. DOM  Document Object Model 文档对象模型 3. BOM  Browser Object Moldel 浏览 ...

  9. 【PHP面向对象(OOP)编程入门教程】2.什么是类,什么是对象,类和对象这间的关系

    类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...

随机推荐

  1. ArrayBlockingQueue和LinkedBlockingQueue的使用

    ArrayBlockingQueue和LinkedBlockingQueue的使用 博客分类: java.util.concurrent   BlockingQueue接口定义了一种阻塞的FIFO q ...

  2. Codeup 25593 Problem G 例题5-7 求圆周率pi的近似值

    题目描述 用如下公式 4*Π = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 - 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不 ...

  3. Java课程设计之——Web前端

    主要使用的技术 Javascript/JQuery html css Jsp 前期调查 能看到的网页大致可以分为两个部分,一个是搜索的首页index.html,一个是搜索结果页/s index.htm ...

  4. termux上安装lxml失败

    想试试在手机上随时可以接收到各个平台上最新的消息,于是打算在qpython上写个python的爬虫,安装bs4后,在安装lxml时出现了问题. qpython失败后,改用termux试一下,结果出现了 ...

  5. day01,了解gcc

    今天主要是学一下gcc 功能选项: 一. 1.  gcc -E:表示预处理,把指令处理掉 2.gcc -o:改变目标文件名称 3. gcc -c: 表示只编译不链接(也就是不生成a.out) 4. g ...

  6. Spring Cloud 系列之 Gateway 服务网关(一)

    什么是 Spring Cloud Gateway Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由 ...

  7. B2. Character Swap (Hard Version)

    链接: http://codeforces.com/contest/1243/problem/B2 题目大意: 两个字符串,判断能否通过交换为从而使得这两个字符串完全一致,如不可以的话,直接输出NO, ...

  8. 再看CVE-2018-12613 phpmyadmin后台文件包含&&RPO攻击

    写在前面 因为看了朋友的一篇分析又回头想了想自己去年遇到的这个纠结的问题. 去年写过一篇phpmyadmin后台文件包含的文章,写的非常的草草,并没有分析的过程,只是把自己的问题记了下来.当时纠结于最 ...

  9. 归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对

    面试题51. 数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出 ...

  10. api接口安全

    API接口安全 在做app开发中,如何保证api的接口安全,不被其他app去调用? 接口安全的措施很多,今天记录一个常用的措施 签名: 前台想要调用接口,需要使用几个参数生成签名: 时间戳:当前时间 ...