数组(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. c++ 启发式搜索解决八数码问题

    本文对八数码问题 启发式搜索 (C++)做了一点点修改 //fn=gn+hn #include<iostream> #include<queue> #include<st ...

  2. 选择IT行业的自我心得,希望能帮助到各位!(三)失败篇

    可能很多小伙伴会说人人创业岂不是人人都能成功,岂不是人人都能成功,是不是每个人都能开上保时捷,法拉利泡着美女,很多人也会说你看他看她多轻松,做个IT一样就赚钱赚钱了. 那么又有多少人能理解到你的心酸了 ...

  3. L0 torch 构建网络初步

    L0 pytorch 构建简单网络 本文是L0, 目的是把pytorch构建感知器的程序,仔细剖析理解. import torch from torch import nn torch.__versi ...

  4. Daily Scrum 1/7/2015

    Process: Zhaoyang: Do some code intergration and test the total feature in the IOS APP. Yandong: Cod ...

  5. SpringMVC数据传递及乱码问题

    基础环境搭建请参考SringMVC入门程序 一.SpringMVC数据处理 1:resful 路径传值 http://localhost/get/1/2 /* http://localhost/get ...

  6. 从零开始学习docker之docker的安装

    一.Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程 ...

  7. pytorch中tensor的属性 类型转换 形状变换 转置 最大值

    import torch import numpy as np a = torch.tensor([[[1]]]) #只有一个数据的时候,获取其数值 print(a.item()) #tensor转化 ...

  8. 学习笔记-CTF密码相关

    RSA共模攻击 RSA基本原理 ①  选择两个大的质数p和q,N=pq: ②  根据欧拉函数,求得r=(p-1)(q-1): ③  选一个小于r的整数e,求得e关于模r的模反元素d: ④  将p和q的 ...

  9. 用百度AI平台接口实现OCR文字识别

    目录 一.接入指南 1.注册 2.登录 3.创建应用 二.安装接口模型 三.编写python代码 四.识别结果 一.接入指南 若想利用百度AI开放平台进行软件开发,首先应成为百度AI开放平台的开发者. ...

  10. 【Linux常见命令】split命令

    split - split a file into pieces 按照指定的行数或大小分割文件 语法: split [OPTION]... [INPUT [PREFIX]] Output fixed- ...