资讯专栏INFORMATION COLUMN

理解数组,对象,类数组对象

wangshijun / 3559人阅读

摘要:角度实例对象没有属性,只有构造函数才有属性,也就是说构造函数本身保存了对属性的引用。。的属性变量和属性对象将会被该对象引用的构造函数所创建的对象继承那么将会继承属性函数。

本文章旨在讲解数组,对象,类数组对象之间的联系。但会穿插一些其他的相关知识。
首先理解它们的概念:
1、数组
(1)什么是数组:简而言之就是一组有序的数据集合。
它的定义方法有三种。

var arr=[值1,值2,值3];                //隐式创建

var arr=new Array(值1,值2,值3);      //直接实例化

var array=new Array(size);           //创建数组并指定长度
//方法一
var arr1 = [1,3,5,7,9];
    
//方法二
var arr2 = new Array(2,4,6,8,10);

//方法三
var arr3 = new Array(3);//固定数组长度为3
arr3[0] = 1;
arr3[1] = 2;
arr3[2] = 3;

(2)数组的三大属性

length

数组定义时可以无需指定数组长度

let arr4 = [1,3,52,5,2];
console.log(arr4.length);//5

constructor

let arr5 = [1,3,5,7];
console.log(arr5.constructor);//ƒ Array() { [native code] }

prototype

prototype原型对象是javascript基于原型链表实现的一个重要属性。
Javascript角度:1. 实例对象没有prototype属性,只有构造函数才有prototype属性,也就是说构造函数本身保存了对prototype属性的引用。。2. prototype属性对象有一个constructor属性,保存了引用他自己的构造函数的引用(看起来像是个循环:A指向B,B指向A...) 3.prototype对象(不要被我这里的属性对象,对象,对象属性搞晕乎了,说是属性对象,就是说当前这个东西他首先是某个对象的属性,同时自己也是个对象。对象属性就是说它是某个对象的属性。)的属性变量和属性对象将会被该prototype对象引用的构造函数所创建的对象继承(function A(){} A.prototype.pa = function(){} var oA = new A(); 那么oA将会继承属性函数pa)。**

let arr6 = [1,2,4,5,6];
console.log(arr6.prototype)//undefined

一般我们用到的时候是这样用的

let arr7 = [1,3,5,6,7,8];
Array.prototype.alert = function(){console.log("arr7")}//这里封装的是数组的公有方法。
console.log(arr7.alert())//arr7

对于想要深入的了解请百度原型链模式,这样您可以详细的研究它的一些公有方法。
2、对象
(1)什么是对象。
对象定义:js中对象类型为一组无序的由键->值组成的数据集合,其元素的键名和值都可以自定义
它的定义方法有两种。

var obj1 = {name:"zhang",age:355,id:1};
var obj2 = new Object({name:"zhang",age:234,id:2})
console.log(obj1["name"])//zhang
console.log(obj2.length)//undefined

以上的例子我们可以得出:对象自身所拥有的(不包括继承来的)任何属性都是有用户自定义的。

我们现在可以将数组和对象进行一下比较,是不是感觉数组和对象很相像。
再举出一个例子。我们进行比较可能更直观一些。

let ary = [2,2,4,5];
let o = {0:23,1:23,2:32,length:3};
console.log(ary[0],o[0]);//2,23
console.log(ary.length,o.length);//4,3

通过例子我们不难发现:我们发现完全可以使用对象来模拟数组,只要我们定义的对象的每个元素的键名都使用数字并且让其保持递增,且动态的定义一个length属性来表示元素个数,那么从效果上来说,基本就个数组相同了!

类数组对象:只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为它是类数组对象!

一般我们常用到的类数组对象如:arguments,获取的元素集合

类数组对象不仅在效果上与数组相似,在某些操作上也是相同的。

//定义数组和类数组对象
let ary1 = [2,5,23,5,52];
let oo = {0:4,1:32,2:324,length:3};
//读写操作
console.log(ary1[1],oo[1],ary1["length"],oo["length"]);//5,32,5,3
ary1[0] = 4;
oo[0] = 6;
console.log(ary1[0],oo[0]);//4,6
//遍历
for(var i=0;i

通过简单的对比,我们不难看出,其实我们可以从数据结构上把js中的数组归为对象,因为我们可以使用对象来模拟数组,这里仅仅说的是数据结构上,其实它们本身所继承来的方法和一些属性是不同的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90009.html

相关文章

  • 深入理解JavaScript数组

    摘要:但是,我们可以借用类数组方法不难看出,此时的在调用数组原型方法时,返回值已经转化成数组了。很多时候,深入看看源代码也会让你对这个理解的更透彻。的前端乐园原文链接深入理解类数组 起因 写这篇博客的起因,是我在知乎上回答一个问题时,说自己在学前端时把《JavaScript高级程序设计》看了好几遍。于是在评论区中,出现了如下的对话:showImg(https://segmentfault.c...

    Towers 评论0 收藏0
  • 数组对象转换为数组对象的简单理解

    摘要:将对象转换为数组对象的限制不知道现在还是否需要考虑这一点之前的版本将实现为对象而非对象,对象不能直接调用方法,因此需要采取其他方式转化。 关于类数组对象 JavaScript中有一些著名的类数组对象,它们看起来很像数组: 拥有length属性 元素按序保存在对象中,可以通过索引访问 但实际和数组又不是一回事: 没有数组的很多方法 也会有数组没有的方法 (e.g. NodeLis...

    wayneli 评论0 收藏0
  • 理解javascript数组

    摘要:也就是说,为一些常规对象增加一些属性可以使其变成类数组对象。实际上,类数组的定义只有一条,具有属性。在中,所有的数组方法都是通用的。 什么是类数组 javascript中一些看起来像却不是数组的对象,叫做类数组。也就是说,为一些常规对象增加一些属性可以使其变成类数组对象。 类数组的特征: 有索引(数字)属性和length属性的对象 不具有数组的方法。间接调用数组的一些方法,比如pus...

    yzzz 评论0 收藏0
  • JavaScript 语言核心笔记(持续更新)

    摘要:在同一个块内,不允许用重复声明变量。中为新增了块级作用域。自带遍历器的对象有数组字符串类数组对象对象的对象等和结构对象。返回一个遍历器,使遍历数组的键值对键名键值。 目录 1.语法 2.类型、值和变量 3.表达式和运算符 4.语句 5.数组 6.对象 7.函数 8.全局属性和方法 9.词法作用域、作用域链、闭包 10.原型链、继承机制 11.this的理解 12.ES5新特性 13.E...

    suosuopuo 评论0 收藏0
  • 石头理解的set

    摘要:对对象进行遍历操作。对象没有提供访问指定值的方法。所以石头一般使用对象存放对象,然后检查是否有某个值,使用数组取数据。返回是否删除指定的对象。比如无法准确地取出指定的值。应该是做为一个数组对象的补充存在。 Set set类似数组。其成员的值都是唯一的。 数组去重 const set = new Set([1,2,3,2,4,2,3,4]) console.log(set) [......

    shinezejian 评论0 收藏0

发表评论

0条评论

wangshijun

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<