js中的伪数组

1.获取伪数组中的前几个元素

伪数组(类数组):

无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

function log(){

var args = Array.prototype.slice.call(arguments); //为了使用unshift数组方法,将argument转化为真正的数组

args.unshift('(app)'); console.log.apply(console, args);

};

这里把符合以下条件的对象称为伪数组:

1,具有length属性

2,按索引方式存储数据

3,不具有数组的push,pop等方法

1,function内的arguments 。

2,通过document.forms,Form.elements,Select.options,document.getElementsByName() ,

document.getElementsByTagName() ,childNodes/children 等方式获取的集合(HTMLCollection,NodeList)等。

3,特殊写法的对象 ,如

Js代码 收藏代码

var obj={};

obj[0] = "一";

obj[1] = "二";

obj[2] = "三";

obj.length = 3;

2.javascript的数组

在回答这个问题之前,需要题主能明白一个知识,在JavaScript中,除了5种原始数据类型之外,其他所有的都是对象,包括函数(Function)。

5种原始数据类型:在这个前提下,咱们再来讨论JavaScript的对象。1、创建对象1 varobj = {}; 这种方式创建对象,被称之为对象直接量(Object Literal),意思很简单,就是直接声明一个没有任何属性的对象,使用对象直接量来创建对象是JavaScript中最常用的一种手法。

除了使用直接量创建之外,还可以使用构造函数 Object() 创建对象1 varobj = newObject(); // 创建一个空对象,和{}一样更多创建对象的知识,参见《JavaScript权威指南(第6版)》第6章。2、创建数组1 vararr = []; 这是使用数组直接量(Array Literal)创建数组。

除了上面这种方式之外,还可以使用 构造函数Array() 创建数组对象:1 vararr = newArray();更多创建数组的知识,参见《JavaScript权威指南(第6版)》第7章。3、对象与数组的关系在说区别之前,需要先提到另外一个知识,就是JavaScript的原型继承。

所有JavaScript的内置构造函数都是继承自 Object.prototype。在这个前提下,可以理解为使用 new Array() 或 [] 创建出来的数组对象,都会拥有 Object.prototype 的属性值。

对于题主的问题意味着:123456 // 拥有Object.prototype的属性值varobj = {};// 使用数组直接量创建的数组,由于Array.prototype的属性继承自 Object.prototype,// 那么,它将同时拥有Array.prototype和Object.prototype的属性值vararr = [];因为,这个问题不是分析JavaScript原型链的概念,我就不展开说了,推荐题主阅读几篇文章,在回答的最后面,我会给出文章的链接。通过这一节可以得到对象和数组的第一个区别:对象没有数组Array.prototype的属性值4、什么是数组?数组具有一个最基本特征:索引,这是对象所没有的,下面来看一段代码:12345678910 varobj = {};vararr = [];obj[2] = 'a';arr[2] = 'a';console.log(obj[2]); // 输出 aconsole.log(arr[2]); // 输出 aconsole.log(obj.length); // 输出 undefinedconsole.log(arr.length); // 输出 3通过上面这个测试,可以看到,虽然 obj[2]与arr[2] 都输出'a',但是,在输出length上有明显的差异,这是为什么呢?obj[2]与arr[2]的区别obj[2]输出'a',是因为对象就是普通的键值对存取数据而arr[2]输出'a' 则不同,数组是通过索引来存取数据,arr[2]之所以输出'a',是因为数组arr索引2的位置已经存储了数据obj.length与arr.length的区别obj.length并不具有数组的特性,并且obj没有保存属性length,那么自然就会输出undefined而对于数组来说,length是数组的一个内置属性,数组会根据索引长度来更改length的值。

为什么arr.length输出3,而不是1呢?这是由于数组的特殊实现机制,对于普通的数组,如果它的索引是从0开始连续的,那么length的值就会等于数组中元素个数而对于上面例子中arr,在给数组添加元素时,并没有按照连续的索引添加,所以导致数组的索引不连续,那么就导致索引长度大于元素个数,那么我们称之为稀疏数组。有关稀疏数组的特性就不再讨论更多,参见《JavaScript权威指南(第6版)》7.3节。

5、伪数组从外观上看伪数组,看不出来它与数组的区别,在JavaScript内置对象中常见的伪数组就是大名鼎鼎的auguments:123 (function() { console.log(typeofarguments); // 输出 object,它并不是一个数组}());另外在DOM对象中,childNodes也是伪数组1 console.log(typeofdocument.body.childNodes); // 输出 object 除此之外,还有很多常用的伪数组,就不一一列举。伪数组存在的意义,是可以让普通的对象也能正常使用数组的很多算法,比如:12345 vararr = Array.prototype.slice.call(arguments, 0); // 将arguments对象转换成一个真正的数组Array.prototype.forEach.call(arguments, function(v) { // 循环arguments对象});更多关于伪数组的知识,参见《JavaScript权威指南(第6版)》7.11节。

6、总结对象没有数组Array.prototype的属性值,类型是Object,而数组类型是Array;数组是基于索引的实现,length会自动更新,而对象是键值对;使用对象可以创建伪数组,伪数组可以正常使用数组的大部分方法;参考资料:《JavaScript权威指南(第6版)》 下载:?sudaref=.hk&retcode=0《Javascript继承机制的设计思想》 《Javascript 面向对象编程(一):封装》 《Javascript面向对象编程(二):构造函数的继承》 《Javascript面向对象编程(三):非构造函数的继承》 。

3.javascript的数组

在回答这个问题之前,需要题主能明白一个知识,在JavaScript中,除了5种原始数据类型之外,其他所有的都是对象,包括函数(Function)。

5种原始数据类型: 在这个前提下,咱们再来讨论JavaScript的对象。1、创建对象1 varobj = {}; 这种方式创建对象,被称之为对象直接量(Object Literal),意思很简单,就是直接声明一个没有任何属性的对象,使用对象直接量来创建对象是JavaScript中最常用的一种手法。

除了使用直接量创建之外,还可以使用构造函数 Object() 创建对象1 varobj = newObject(); // 创建一个空对象,和{}一样 更多创建对象的知识,参见《JavaScript权威指南(第6版)》第6章。2、创建数组1 vararr = []; 这是使用数组直接量(Array Literal)创建数组。

除了上面这种方式之外,还可以使用 构造函数Array() 创建数组对象:1 vararr = newArray(); 更多创建数组的知识,参见《JavaScript权威指南(第6版)》第7章。3、对象与数组的关系 在说区别之前,需要先提到另外一个知识,就是JavaScript的原型继承。

所有JavaScript的内置构造函数都是继承自 Object.prototype。在这个前提下,可以理解为使用 new Array() 或 [] 创建出来的数组对象,都会拥有 Object.prototype 的属性值。

对于题主的问题意味着:123456 // 拥有Object.prototype的属性值 varobj = {}; // 使用数组直接量创建的数组,由于Array.prototype的属性继承自 Object.prototype,// 那么,它将同时拥有Array.prototype和Object.prototype的属性值 vararr = []; 因为,这个问题不是分析JavaScript原型链的概念,我就不展开说了,推荐题主阅读几篇文章,在回答的最后面,我会给出文章的链接。通过这一节可以得到对象和数组的第一个区别:对象没有数组Array.prototype的属性值4、什么是数组?数组具有一个最基本特征:索引,这是对象所没有的,下面来看一段代码:12345678910 varobj = {}; vararr = []; obj[2] = 'a'; arr[2] = 'a'; console.log(obj[2]); // 输出 a console.log(arr[2]); // 输出 a console.log(obj.length); // 输出 undefined console.log(arr.length); // 输出 3 通过上面这个测试,可以看到,虽然 obj[2]与arr[2] 都输出'a',但是,在输出length上有明显的差异,这是为什么呢?obj[2]与arr[2]的区别obj[2]输出'a',是因为对象就是普通的键值对存取数据而arr[2]输出'a' 则不同,数组是通过索引来存取数据,arr[2]之所以输出'a',是因为数组arr索引2的位置已经存储了数据 obj.length与arr.length的区别obj.length并不具有数组的特性,并且obj没有保存属性length,那么自然就会输出undefined而对于数组来说,length是数组的一个内置属性,数组会根据索引长度来更改length的值。

为什么arr.length输出3,而不是1呢?这是由于数组的特殊实现机制,对于普通的数组,如果它的索引是从0开始连续的,那么length的值就会等于数组中元素个数而对于上面例子中arr,在给数组添加元素时,并没有按照连续的索引添加,所以导致数组的索引不连续,那么就导致索引长度大于元素个数,那么我们称之为稀疏数组。有关稀疏数组的特性就不再讨论更多,参见《JavaScript权威指南(第6版)》7.3节。

5、伪数组 从外观上看伪数组,看不出来它与数组的区别,在JavaScript内置对象中常见的伪数组就是大名鼎鼎的auguments:123 (function() { console.log(typeofarguments); // 输出 object,它并不是一个数组 }()); 另外在DOM对象中,childNodes也是伪数组1 console.log(typeofdocument.body.childNodes); // 输出 object 除此之外,还有很多常用的伪数组,就不一一列举。伪数组存在的意义,是可以让普通的对象也能正常使用数组的很多算法,比如:12345 vararr = Array.prototype.slice.call(arguments, 0); // 将arguments对象转换成一个真正的数组 Array.prototype.forEach.call(arguments, function(v) { // 循环arguments对象 }); 更多关于伪数组的知识,参见《JavaScript权威指南(第6版)》7.11节。

6、总结对象没有数组Array.prototype的属性值,类型是Object,而数组类型是Array;数组是基于索引的实现,length会自动更新,而对象是键值对;使用对象可以创建伪数组,伪数组可以正常使用数组的大部分方法;参考资料:《JavaScript权威指南(第6版)》 下载:?sudaref=.hk&retcode=0《Javascript继承机制的设计思想》 《Javascript 面向对象编程(一):封装》 《Javascript面向对象编程(二):构造函数的继承》 《Javascript面向对象编程(三):非构造函数的继承》 。

4.JS数组中true与false

理解==或===的区别

1. ==会把比较的二者进行类型转换:

如:0 == false; // true, 会把0转成bool值进行比较

1 == true; // true, 同样把1转成bool值再和true进行比较

2. ===是不会把比较的二者进行类型转换,是string就是string,是number就是number

如: 0 === false; // false, 因为0是number,false是boolean,两者就肯定不相等

1 === true; // false

js中的伪数组

转载请注明出处JS代码网 » js中的伪数组

资讯

js获得div内的标签

阅读(31)

本文主要为您介绍js获得div内的标签,内容包括怎么获取div标签之间的内容,javascript如何获取div里面的标签,jQuery或者js如何获得div后面的标签或标签内容。可以使用next() 取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素

资讯

js的function方法详解

阅读(27)

本文主要为您介绍js的function方法详解,内容包括javascript中Function()的写法,javascript中的function用法,javascript中function方法。因为JS并不支持指针与委托,其实,这就是Javascript所实现的类似C++中的指针,C#中的委托.XXX相当于托委的

资讯

js中的this对象的api

阅读(32)

本文主要为您介绍js中的this对象的api,内容包括JavaScript里面的API是什么意思?怎么用?,js里面构造函数对象api的区别,关于javascript中的this对象。<script type="text/javascript"> function fun(){ alert("good"); var a

资讯

js调用c变量的值

阅读(33)

本文主要为您介绍js调用c变量的值,内容包括js调用c#里的变量,JS中使用变量的问题,JS函数给全局变量赋值。首先,需要将数组在客户端定义,然后才能操作, 例如: var d=10; var strMap=<%=mapvalue%&gt;; --

资讯

js怎样打开新的标签页

阅读(32)

本文主要为您介绍js怎样打开新的标签页,内容包括js打开新标签页,Javascript中如何打开新的标签页,如何用javascript在一个新IE窗口中打开一个新页.。这里类似于友情链接js代码:<script type=text/JavaScript> function MM_jumpMenu(sel

资讯

js继承的作用域

阅读(32)

本文主要为您介绍js继承的作用域,内容包括javascript作用域,js中继承的几种用法总结,js的继承方式分别适合哪些应用场景。一,js中对象继承js中有三种继承方式1.js原型(prototype)实现继承复制代码 代码如下:<SPAN style="BACKG

资讯

jsio流的读取文件内容

阅读(41)

本文主要为您介绍jsio流的读取文件内容,内容包括js怎么实现io流写入txt文档?,js写一个读取io文件流的函数,怎么设置函数里的返回值调用函数时,js怎么实现io流写入txt文档?。一帮烂厨子 就会瞎扯淡。发没用的代码有么var fso=new ActiveXObj

资讯

js闭包的好处

阅读(30)

本文主要为您介绍js闭包的好处,内容包括JavaScript中的闭包好处是什么?为什么用到闭包?,JS闭包主要作用是干嘛的?,JavaScript中的闭包是用来做什么的?。变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就

资讯

js如何获取输入框的值

阅读(40)

本文主要为您介绍js如何获取输入框的值,内容包括js子窗口如何获取父窗口输入框值,JS怎么获得文本框里的输入值,求js高手看下怎么获取输入框的值?。父页面 代码如下: <input type="text" id="name" value="zhangsan"/> <a href="a

资讯

node.js是干什么用的

阅读(31)

本文主要为您介绍node.js是干什么用的,内容包括node.js干嘛的和JavaScript啥区别,node.js是什么,node.js能干什么?。node.js是一个运行在chromeJavascript运行环境下(俗称GoogleV8引擎)的开发平台,用来方便快捷的创建服务器端网

资讯

ionic开发自己的js

阅读(36)

本文主要为您介绍ionic开发自己的js,内容包括ionic2怎么调用自己写的js,ionic2怎么调用自己写的js,如何把写好的js插入ionic的控制器。ionic是一款基于angularjs的html5移动app开发框架phonegap就是一款可以打包并且可以让js调用原生的移动

资讯

js清空文本框的内容

阅读(57)

本文主要为您介绍js清空文本框的内容,内容包括jsp清空文本框内容,javascript如何清除文本框内的内容.,javascript清空文本框问题。<input type="text" name="phone" value="${dept.phone}" onClick="JavaS

资讯

js如何修改元素的属性

阅读(29)

本文主要为您介绍js如何修改元素的属性,内容包括怎么在地址栏用JavaScript修改网页元素属性?,关于js修改元素的属性,怎样用js更改当前元素的子元素的属性。var choose = document.getElementById("choose");button.onclick = func

资讯

Js定位div下的table

阅读(21)

本文主要为您介绍Js定位div下的table,内容包括用jquery定位div下的table,DIV标签内有个table,table是js返回的,所以会具体下情况table大小会,Jquery操作div里的table;。你好····你的需求应该是复制table并隐藏其中的button,其中这个tabl

资讯

js获得div内的标签

阅读(31)

本文主要为您介绍js获得div内的标签,内容包括怎么获取div标签之间的内容,javascript如何获取div里面的标签,jQuery或者js如何获得div后面的标签或标签内容。可以使用next() 取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素

资讯

js的function方法详解

阅读(27)

本文主要为您介绍js的function方法详解,内容包括javascript中Function()的写法,javascript中的function用法,javascript中function方法。因为JS并不支持指针与委托,其实,这就是Javascript所实现的类似C++中的指针,C#中的委托.XXX相当于托委的

资讯

js中的this对象的api

阅读(32)

本文主要为您介绍js中的this对象的api,内容包括JavaScript里面的API是什么意思?怎么用?,js里面构造函数对象api的区别,关于javascript中的this对象。<script type="text/javascript"> function fun(){ alert("good"); var a

资讯

js调用c变量的值

阅读(33)

本文主要为您介绍js调用c变量的值,内容包括js调用c#里的变量,JS中使用变量的问题,JS函数给全局变量赋值。首先,需要将数组在客户端定义,然后才能操作, 例如: var d=10; var strMap=<%=mapvalue%&gt;; --

资讯

js怎样打开新的标签页

阅读(32)

本文主要为您介绍js怎样打开新的标签页,内容包括js打开新标签页,Javascript中如何打开新的标签页,如何用javascript在一个新IE窗口中打开一个新页.。这里类似于友情链接js代码:<script type=text/JavaScript> function MM_jumpMenu(sel

资讯

js继承的作用域

阅读(32)

本文主要为您介绍js继承的作用域,内容包括javascript作用域,js中继承的几种用法总结,js的继承方式分别适合哪些应用场景。一,js中对象继承js中有三种继承方式1.js原型(prototype)实现继承复制代码 代码如下:<SPAN style="BACKG

资讯

jsio流的读取文件内容

阅读(41)

本文主要为您介绍jsio流的读取文件内容,内容包括js怎么实现io流写入txt文档?,js写一个读取io文件流的函数,怎么设置函数里的返回值调用函数时,js怎么实现io流写入txt文档?。一帮烂厨子 就会瞎扯淡。发没用的代码有么var fso=new ActiveXObj

资讯

js做下雨的页面特效

阅读(34)

本文主要为您介绍js做下雨的页面特效,内容包括如何用html或者js制作天降很多的滑稽还有代码雨的特效?,大家做下一个下雨JavaScript脚本,怎样在整个网页中加入春夏秋冬(下雨、飘雪什么的)动画效果?百。<style>* {margin:0;padding:0;}body {