数组(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. Java的多线程编程模型5--从AtomicInteger开始

    Java的多线程编程模型5--从AtomicInteger开始 2011-06-23 20:50 11393人阅读 评论(9) 收藏 举报 java多线程编程jniinteger测试 AtomicIn ...

  2. JS中的offsetWidth/offsetHeight/offsetTop/offsetLeft、clientWidth/clientHeight/clientTop/clientLeft、scrollWidth/scrollHeight/scrollTop/scrollLeft

    这是一组非常容易弄混的参数!都是描述某个盒子元素的宽度.高度以及上或左的距离偏移量. 1. offsetWidth / offsetHeight(不包括外边距) offsetWidth:返回元素的宽度 ...

  3. 数据结构和算法(Golang实现)(7)简单入门Golang-标准库

    使用标准库 一.避免重复造轮子 官方提供了很多库给我们用,是封装好的轮子,比如包fmt,我们多次使用它来打印数据. 我们可以查看到其里面的实现: package fmt func Println(a ...

  4. 2019-08-01【机器学习】有监督学习之分类 KNN,决策树,Nbayes算法实例 (人体运动状态信息评级)

    样本: 使用的算法: 代码: import numpy as np import pandas as pd import datetime from sklearn.impute import Sim ...

  5. Nexus3 集成 crowd 插件

    公司使用的软件开发和协作工具为 Atlassian 系列软件,所以统一使用 crowd 来实现统一登录(SSO). crowd 配置 具体操作细节见我之前写的 Atlassian 系列软件安装(Cro ...

  6. L2 Softmax与分类模型

    softmax和分类模型 内容包含: softmax回归的基本概念 如何获取Fashion-MNIST数据集和读取数据 softmax回归模型的从零开始实现,实现一个对Fashion-MNIST训练集 ...

  7. [转载]MySQL中int(11)最大长度是多少?

    原文地址:https://blog.csdn.net/allenjay11/article/details/76549503 今天在添加数据的时候,发现当数据类型为 int(11) 时,我当时让用户添 ...

  8. java多线程3:原子性,可见性,有序性

    概念 在了解线程安全问题之前,必须先知道为什么需要并发,并发给我们带来什么问题. 为什么需要并发,多线程? 时代的召唤,为了更充分的利用多核CPU的计算能力,多个线程程序可通过提高处理器的资源利用率来 ...

  9. 通达OA任意用户登录 漏洞复现

    0x00 漏洞简介 通达OA国内常用的办公系统,使用群体,大小公司都可以,其此次安全更新修复的高危漏洞为任意用户登录漏洞.攻击者在远程且未经授权的情况下,通过利用此漏洞,可以直接以任意用户身份登录到系 ...

  10. 如何在非 sudo 用户下运行 docker 命令?

    当我们在一台 Linux 系统中安装了 Docker 后, 有时候会遇到下面这样的错误, 我们在运行 docker 的命令时必须加上 sudo, 例如: sudo docker ps, 但是我们其实更 ...