简述JavaScript对象、数组对象与类数组对象
问题引出
在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取。同样的,在使用getElementsByName等DOM遍历方法中,我们也习惯性会去使用数组方法来进行操作,如数字索引、用length属性访问长度并遍历等等。久而久之,很多人都一直认为DOM遍历方法返回的是一个数组。 实际上。。。。。。
返回了一个HTMLCollection对象
假如我们用一个数组来表示:
返回的当然是一个数组对象了哈哈哈哈哈
上面两个运行环境截图给萌新们展示了,DOM遍历方法返回的不是数组对象,而是一个HTMLCollection对象,下面来说说这种特别像数组却又不是数组的对象:
JavaScript对象
JavaScript是一个基于对象的语言,正所谓万物皆是对象。JavaScript对对象的定义是:属性的无序集合,每个属性存放一个原始值、对象或函数。这句话可以通俗理解为,每个对象就是一个键值对的集合,键即是属性名,而值就是属性值,可以是原始值、对象或者函数。
这里用字面量的方法定义了一个对象
而访问对象的属性有以下两种办法:
- 用‘.’来访问,直接用 对象.属性名 的方法来获取
- 用[]来访问:对象[属性名]
数组对象
而数组对象,则是一个特殊的对象,可以看作是键名(属性名)只能是数字(注意是绝对意义上的数字,而不是内容为数字的字符串)、并且只能从0开始顺次递增1的整数的对象。数组对象继承了对象的方法与特性,同时在自己这一层又定义了很多自己的方法,比如push()、shift()等等,这就构建了我们平时所使用的数组。
从上可以看到一个数组,除了所存储的键值对属性外,还具有length和__proto__两个属性,length不用多说,而__proto__指向该对象所继承的元素,可以理解为指向父类。 这里可以看到一个普通的数组对象继承自Array[0],在Array[0]中定义了数组的各种方法,而Array[0]则继承自Object.
类数组对象及转换
这里再来说我们的类数组对象,相信就容易理解多了。 类数组对象是JavaScript中一类特殊的对象,他们也继承自Object对象,具有length属性,可以使用[]进行访问(这样也就可以使用for进行循环遍历)、并且键是自然数序列。但是他们并不继承自Array对象,也就不具有数组对象的种种方法了~
而JavaScript中的类数组对象并不只有HTMLCollection一个,另外常用的还有Arguments(函数的参数列表)、NodeList(节点列表)、StyleSheetList(样式列表)等等,这里就不详细介绍了,大家可以自己试试他们各自的使用方法、属性与方法。除了JavaScript内置的一些类数组对象之外,我们也可以自己来构建、甚至定义类数组对象来使用,比如甚至
。。。。。。
另外一个要提是类数组对象向数组对象的转换。虽然我现在还没有遇到过需要做如此转换的情景,不过还是介绍下这个方法。除了“用for循环遍历访问类数组对象中的元素并装入另外定义的一个数组”这样的方法外,博客大神们还提供了另外一个方法,如下:
这里使用了call方法,本菜鸟目前对JS继承链上Function这个分支还没怎么深入研究,不太懂这个方法。留作以后解释吧。。。。。。
简述JavaScript对象、数组对象与类数组对象的更多相关文章
- 浅谈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# ...
- day 23 对象的名称空间 类,对象属性和方法 封装 接口提供
一.对象的特有名称空间 # 对象独有的名称空间:在产生对象时就赋初值 '''class ted: def func(): 当func里不存在参数时,调用时不需要给值 print('hah')ted.f ...
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- JavaScript类数组对象参考
JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...
- javascript 类数组对象
原文:https://segmentfault.com/a/1190000000415572 定义: 拥有length属性,其他属性(索引)为非负整数(对象中的所有会被当做字符串来处理,这里你可以当做 ...
- javascript:类数组 -- 对象
在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象 的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...
- JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组
一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...
随机推荐
- JDBC值事务
事务的四大特性: 原子性, 一致性(比如说A给B转账,A转了之后B的账户增加了,两个都完成才叫一致性),隔离性(A给B转账,A给C转账,AB和AC并发是无关的),永久性(转账之后 不可能复原,就是说不 ...
- html 标签
CSS : overflow : hidden -- 就是给一个盒子定义了一个显示范围.内部的物体.只有在这个范围内部才会被显示.不然就被隐藏. overflow-x overflow-y 控制 ...
- SPOJ FTOUR2 - Free tour II
Description 有些黑点,问你选择不超过 \(k\) 个黑点的路径,路径权值最大是多少. Sol 点分治. 这是qzc的论文题,不过我感觉他的翻译好强啊...我还是选择了自己去看题目... 点 ...
- 安装第三方APP好的站点及解除安全与隐私限制
一.解除安全与隐私限制的任何来源. http://bbs.feng.com/read-htm-tid-10714286.html 接下来,我们就打开终端,然后输入以下命令: sudo spctl ...
- MFC2016.6.8
1.theApp extern声明之后不可以使用?可以用,只是需要extern之后的类名和类名称写对,不要犯得低级错误.2.怎样取出列表控件中的第某列的值?GetItemText(); CListCt ...
- appium 滑动
前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html 知乎Android客户端登陆:htt ...
- [java]OutOfMemoryError 原因及解决办法
导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环 ...
- OpenLayers.2.10.Beginners.Guide---第一章
从网上下载openlayers2,解压取得img theme 文件夹和openlayes.js文件.放在同一文件夹下用phpstorm打开. 创建index.html-------------每一行都 ...
- Vue学习笔记(一)
组件:分三步 创建组件: var myComponent = Vue.extend({ template:'<div>This is my first component</div& ...
- C#递归、动态规划计算斐波那契数列
//递归 public static long recurFib(int num) { if (num < 2) ...