JavaScript 浅析数组对象与类数组对象
数组(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 浅析数组对象与类数组对象的更多相关文章
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
- [Effective JavaScript 笔记]第58条:区分数组对象和类数组对象
示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bi ...
- js之数组,对象,类数组对象
许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...
- python-面向对象-02_类和对象
类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1.1 类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统 ...
- 浅谈JavaScript和DOM中的类数组对象
JavaScript是一门弱类型语言,它的数据类型分为两大类:简单数据类型(5种:Undefined.Null.Boolean.Number.String)和复杂数据类型(1种:Object).Obj ...
- JavaScript、ES6中的类和对象
面向对象可以用于描述现实世界的事物,但是事物分为具体的(特指的)事物和抽象的(泛指的)事物. 面向对象思维的特点: 1.抽取(抽象)对象共有的属性和行为组织(封装)成一个类(模板) 2. ...
- dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题
在 C# 的语法,可以提供自动将某个类的数组自动转这个类的基类数组的方法,但是这样的转换在 Resharper 会提示 Co-variant array conversion 这是什么问题? 在 C# ...
- js面向(基于)对象编程—类(原型对象)与对象
JS分三个部分: 1. ECMAScript标准--基础语法 2. DOM Document Object Model 文档对象模型 3. BOM Browser Object Moldel 浏览 ...
- 【PHP面向对象(OOP)编程入门教程】2.什么是类,什么是对象,类和对象这间的关系
类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...
随机推荐
- 文档根元素 "beans" 必须匹配 DOCTYPE 根 "null"
文档根元素 "beans" 必须匹配 DOCTYPE 根 "null" (2011-11-20 21:26:41) 转载▼ 标签: 杂谈 分类: spring- ...
- 如何正确管理HBase的连接,从原理到实战
本文将介绍HBase的客户端连接实现,并说明如何正确管理HBase的连接. 最近在搭建一个HBase的可视化管理平台,搭建完成后发现不管什么查询都很慢,甚至于使用api去listTable都要好几秒. ...
- 跨平台开源密码管理器 KeePassXC
简介 KeePassXC 是一个开源的跨平台密码管理器.基于 KeePass 二次开发. KeePassXC 可以安全地在本地存储您的密码,配合浏览器插件KeePassXC-Browser可辅助登录. ...
- Python冒泡排序算法及其优化
冒泡排序 所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了.(图中排好序的元素标记为黄 ...
- Ubuntu上mysql, 通过python连接报错Can't connect to MySQL server on xxx (10061)
通过sqlyog连接ubuntu上的mysql报错 试了试python直接连接也报同样的错 那应该就是ubuntu上mysql服务自己的问题了 查看mysql 版本 mysql -V root@clo ...
- 功能测试--聊天功能测试&微信聊天
微信聊天功能测试 发送对象 普通用户.公众号.群.其他特殊主体 衍生功能 转发.语音转文字.删除等 消息发送 单聊.群聊.语音.文字.图片.表情.链接.字符及长度 消息管理 发布通知.接受通知.发文件 ...
- 百度智能云虚拟主机 Typecho 分类功能失效 | 开启伪静态地址
出现的问题 $this->is() 方法失效,无法正确判断 archive.category.tags 页面类型. 点击分类页面.归档页面时,虽然 URL 是正确的,但网页内容却是 index. ...
- 10.添加script标签,判断onload是否完成
class Tools { static loadScript(url, callback) { let old_script = document.getElementById(url); if ( ...
- 解决利用hibernate连接mysql时无法插入汉字的问题
1.先修改mysql数据库的配置文件my.ini,此文件放在mysql安装文件的根目录下.找到default-character-set属性,并将其值更改为utf8(不是utf-8),将default ...
- 面试题56 - I. 数组中数字出现的次数
面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 ...