浅析JavaScript中的array数组类型系统
array基本数据类型

array基本数据类型Array是JavaScript中最常用的一种基本数据类型,它是一种容器,可以存储多个值。
本文将深入探讨Array的基本概念、常见操作、数据遍历和注意事项。
一、基本概念Array是一种有序集合,每个元素在数组中有一个唯一的位置,它的下标从0开始计算。
数组可以存储各种类型的值,包括数字、字符串、布尔、对象等。
二、常见操作1. 创建一个数组有两种方式可以创建一个数组。
方式一:使用数组字面量([])来创建。
eg:var arr = []; //arr是空数组var arr1 = [1, 2, 3]; //arr1包含三个元素,分别是1,2和3var arr2 = ['a', 'b', 'c']; //arr2包含三个元素,分别是'a','b'和'c'方式二:使用Array构造函数来创建(推荐使用第一种方式)。
eg:var arr = new Array(); //arr是空数组var arr1 = new Array(1, 2, 3); //arr1包含三个元素,分别是1,2和3var arr2 = new Array('a', 'b', 'c'); //arr2包含三个元素,分别是'a','b'和'c'2. 访问和修改数组中的元素可以通过数组的下标来访问和修改数组中的元素。
eg:var arr = ['a', 'b', 'c'];console.log(arr[0]); //输出'a'arr[1] = 'd';console.log(arr); //输出['a', 'd', 'c']3. 获取数组的长度可以使用数组的length属性来获取数组中元素的数量。
js 解析数组字符串对象的方法

1. 介绍JS解析数组字符串对象的重要性在前端开发中,经常需要对数组、字符串和对象进行解析操作,以便获取其中的数据或对其进行进一步处理。
而JavaScript作为常用的前端开发语言,其提供了丰富的方法来解析数组、字符串和对象,为开发者提供了便利。
2. 解析数组在JavaScript中,可以使用不同的方法来解析数组,常用的包括forEach、map、filter和reduce等方法。
这些方法可以帮助开发者遍历数组中的元素,对数组中的元素进行操作,并返回新的数组或其他数据。
3. 解析字符串对于字符串的解析,在JavaScript中可以使用split、substring、indexOf和replace等方法来进行处理。
这些方法可以帮助开发者对字符串进行分割、截取、查找和替换等操作,满足不同的需求。
4. 解析对象在JavaScript中,对象是一种重要的数据类型,对对象的解析也是开发中常见的操作。
可以使用for...in循环、Object.keys、Object.values和Object.entries等方法来遍历对象的属性,获取对象的键值对,并进行进一步的处理。
5. 解析数组字符串对象的方法除了上述提到的方法外,JavaScript还提供了一些其他的解析方法,比如JSON.parse和eval函数,它们可以帮助开发者解析JSON格式的字符串和数组,将字符串转换为可操作的对象或数组。
6. JSON.parse方法JSON.parse方法是一个常用的解析JSON格式字符串的方法,它可以将JSON字符串转换为JavaScript对象或数组。
开发者可以利用该方法将从后台接收到的JSON数据解析为可操作的对象或数组,进而进行进一步的处理和展示。
7. eval函数eval函数是JavaScript中的一个全局函数,它可以将字符串作为代码来执行。
虽然eval函数具有一定的灵活性,但由于安全性和性能方面的考虑,通常不推荐在生产环境中使用eval函数来解析数据。
JavaScript中数组Array.sort()排序方法详解

JavaScript中数组Array.sort()排序⽅法详解JavaScript中数组的sort()⽅法主要⽤于对数组的元素进⾏排序。
其中,sort()⽅法有⼀个可选参数。
但是,此参数必须是函数。
数组在调⽤sort()⽅法时,如果没有传参将按字母顺序(字符编码顺序)对数组中的元素进⾏排序,如果想按照其他标准进⾏排序,就需要进⾏传⼀个参数且为函数,该函数要⽐较两个值,并且会返回⼀个⽤于说明这两个值的相对顺序的数字。
1、对数字数组进⾏由⼩到⼤的顺序进⾏排序。
代码:var arr = [22,12,3,43,56,47,4];arr.sort();console.log(arr); // [12, 22, 3, 4, 43, 47, 56]arr.sort(function (m, n) {if (m < n) return -1else if (m > n) return 1else return 0});console.log(arr); // [3, 4, 12, 22, 43, 47, 56]2、对字符串数组执⾏不区分⼤⼩写的字母表排序。
代码:var arr = ['abc', 'Def', 'BoC', 'FED'];console.log(arr.sort()); // ["BoC", "Def", "FED", "abc"]console.log(arr.sort(function(s, t){var a = s.toLowerCase();var b = t.toLowerCase();if (a < b) return -1;if (a > b) return 1;return 0;})); // ["abc", "BoC", "Def", "FED"]3、对包含对象的数组排序,要求根据对象中的年龄进⾏由⼤到⼩的顺序排列代码:var arr = [{'name': '张三', age: 26},{'name': '李四', age: 12},{'name': '王五', age: 37},{'name': '赵六', age: 4}];var objectArraySort = function (keyName) {return function (objectN, objectM) {var valueN = objectN[keyName]var valueM = objectM[keyName]if (valueN < valueM) return 1else if (valueN > valueM) return -1else return 0}}arr.sort(objectArraySort('age'))console.log(arr) // [{'name': '王五', age: 37},{'name': '张三', age: 26},{'name': '李四', age: 12},{'name': '赵六', age: 4}]以上就是本⽂的全部内容,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,同时也希望多多⽀持!。
js arr 方法

js arr 方法JavaScript(简称JS)是一种脚本语言,用于为网页添加交互性和动态性。
JS作为一种非常流行的编程语言,在网页开发中有着广泛的应用,而数组是JS中最常用的数据结构之一,以其强大的方法被广泛使用。
本文将重点介绍JS中与数组相关的方法——arr方法。
一、数组的定义在javascript中,可以使用[]或new Array()语句定义一个数组。
其中,使用[]在实际开发中更常见,如下面的例子:var arr = ["apple", "banana", "orange"];此时,变量arr就代表了一个数组,其中存储了三个元素——"apple", "banana", "orange"。
二、数组的常规操作1、获取数组元素可以使用数组下标的方式来获取数组元素,下标从0开始。
例如arr[0]表示获取arr数组中的第一个元素,即"apple"。
2、添加/删除数组元素在数组末尾添加一个元素,可以使用push方法。
例如arr.push("pear"),即向arr数组末尾添加一个元素"pear"。
删除数组末尾的元素,可以使用pop方法。
例如arr.pop(),即删除arr数组末尾的元素"orange"。
3、获取/设置数组长度可以使用数组的length属性来获取数组的长度。
例如arr.length表示获取arr数组的长度,即3。
可以使用length属性来设置数组的长度。
例如如果要将arr数组的长度设置为4,则可以使用arr.length = 4。
此时,数组会自动在末尾添加一个undefined元素。
三、数组的高级操作1、forEach方法forEach方法可以遍历数组中的每个元素,并对每个元素执行指定的操作。
JavaScript之数组(Array)详解

JavaScript之数组(Array)详解篇一:Javascript数组及其操作Javascript数组及其操作1.如何创建数组2.如何对数组进行操作(添加,删除,读取)3.数组常见方法和属性如何创建一个数组,一般地根据初始化设定简单分为3种:1.单纯创建数组:var arr=new Array();要点:用new关键字创建数组对象Array(),Array()对象是一个本地类,可以用new创建一个对象后使用2.创建数组的同时规定数组大小:var arr=new Array(10);//这里就创建了一个初始化大小为10的数组注意:当使用数组大小操作初始化大小时,数组会自动被撑大,不会像C语言那样发生错误.动态增长是js数组的一个性质.另外,js中支持最大数组长度为42949672953.直接初始化:var arr=new Array("love","hate","pain");//这里就直接初始化了数组或var arr=["happy","cute","scare"];//括号也可以声明一个数组对象当然,类似C语言,可以定义2维3维和多维的数组,例如:var myArray = new Array();for(var i=0;i myArray[i]=new Array();myArray[i][0]=Math.floor(Math.random()*10);myArray[i][1]=Math.floor(Math.random()*10);myArray[i][2]=Math.floor(Math.random()*10);myArray[i][3]=Math.floor(Math.random()*10);myArray[i][4]=Math.floor(Math.random()*10);myArray[i][5]=Math.floor(Math.random()*10);myArray[i][6]=Math.floor(Math.random()*10);myArray[i][7]=Math.floor(Math.random()*10);myArray[i][8]=Math.floor(Math.random()*10);}myArray.sort( function(x, y) ...{return(x[0]==y[0])?((x[4]==y[4])?(x[8]-y[8]):(x[4]-y[4])):(x[2]-y[2])});for(var i=0;i document.write(myArray[i].join(",") + "");}数组的属性:lengtharr.length返回数组arr的长度,常见于循环中对数组的遍历,比如:for(var i=0;i 执行部分}数组元素的访问: arr[index],其中index表示索引即数组基数,从0开始,共有arr.length个元素.比如: arr[0]访问第一个数组元素,arr[1]访问第二个数组元素....依次类推数组的操作方法:先概览下下面的这些操作数组常用的方法(13个)toString(),valueOf(),toLocalString(),join(),split(),slice(),concat(), pop(),push(),shift(),unshift(),sort(),splice()下面逐一分析这些方法的功能和用法.toString(),valueOf(),toLocalString():功能:返回数组的全部元素注:数组名也可以返回整个数组代码:var m=["am","bm","cm"];//用括号声明一个数组对象alert(m.toString());//toString()返回数组对象的所有内容,用逗号分割,即am,bm,cmalert(m.valueOf());//valueOf()也返回数组对象的所有内容alert(m.toLocaleString());//toLocaleString()也返回数组对象的所有内容,但有地区语言区别,暂不研究alert(m);//数组名也返回数组对象的所有内容join():功能:把数组各个项用某个字符(串)连接起来,但并不修改原来的数组代码:var m=["am","bm","cm"];//用括号声明一个数组对象var n=m.join("---");//用---连接am,bm,cm.alert(m.toString());//m并没有被修改,返回am,bm,cmalert(n);//n是一个字符串,为am---bm---cmsplit():功能:把一个字符串按某个字符(串)分割成一个数组,但不修改原字符串代码:var str="I love maomao,I am caolvchong";var arr=str.split("o");//按字符o把str字符串分割成一个数组alert(arr);//输出整个数组slice():返回某个位置开始(到某个位置结束)的数组部分,不修改原数组代码:var n=m.slice(2);//返回第二个元素bm后面的元素,即cm,dm,em,fmvar q=m.slice(2,5);//返回第二个元素后到第五个元素,即cm,dm,emalert(n);alert(q);数组对象的栈操作:push():数组末尾添加一个项pop():删除数组最后一个项代码:var m=["am","bm","cm","dm","em","fm"];m.push("gm");//在数组末尾添加元素gmalert(m);m.pop();//删除数组最后一个元素gmalert(m);数组对象的队列操作:unshift():数组头添加一个项shift():删除数组第一个项代码:var m=["am","bm","cm","dm","em","fm"];m.unshift("gm");//在数组第一个元素位置添加元素gmalert(m);m.shift();//删除数组第一个元素gmalert(m);sort():数组按字符的ASCII码进行排序,修改数组对象注:即便是数字数组,也将转化为字符串来进行比较排序代码:m.sort();//按字母序排序alert(m);concat():在数组尾添加元素,但不修改数组对象代码:var m=["am","bm"]var n=m.concat("cm");//添加一项cm,并且赋予新数组对象alert(m);//原数组没有被修改alert(n);//输出新数组对象splice():在数组的任意位置进行添加,删除或者替换元素,直接修改数组对象细节:splice()有三个参数或三个以上参数,前两个是必须的,后面参数是可选的进行添加:splice(起始项,0,添加项)进行删除:splice(起始项,要删除的项个数)进行替换:splice(起始项,替换个数,替换项) 这个其实是添加删除的共同结果代码:var m=["am","bm"]m.splice(1,0,"fm","sm");//在第一项后面添加fm和sm,返回am,fm,sm,bmalert(m);m.splice(2,1);//删除第二项后面一项(即第三项sm,返回am,fm,bm)alert(m);m.splice(2,1,"mm");//替换第二项后面一项(即第三项,返回am,fm,mm)alert(m);JavaScript数组操作函数join(delimiter): 把数组中各个元素使用分隔符(delimiter)拼成字符串concat(array1, array2, ...): 合并数组,对原数组不影响,只是返回合并后的新数组pop(): 删除并返回最后一个元素push(element1, element2, ...): 在数组末尾追加元素shift(): 删除并返回第一个元素unshift(element1, element2, ...): 在数组开始位置添加元素reverse(): 将数组元素顺序首尾反转sort(function): 给数组排序如果不给参数,默认按字符排序(所有元素是数字也不会按数字排序的) 参数必须是一个函数,类似function(a, b) {},在函数中判断a, b的大小,a>b返回正数,a slice(start, end): 返回一个新的数组,将start 开始,到end结束(不包括end)之间的元素复制到新数组中splice(start, count, replaceElement1, replaceElement2, ...): 删除或者替换数组元素,从start开始,对count个元素进行删除或替换如果提供replaceElement参数则进行替换,否则进行删除操作,被替换的元素个数和replaceElements的个数不必相等返回一个数组,包含被删除或替换掉的元素判断是否数组的方法var arrayVar = ["aaa", "bbb", "ccc"];var nonArrayVar = { length:4, otherAttribute:"attr" };document.write(arrayVar.constructor==Array);document.write("");document.write(nonArrayVar.constructor==Array);结果是true, falsegrep、mapPerl语言带出来的东西,jQuery实现selector时用了这种方式grep对数组的grep操作,指类似这样的代码:Array newArray = grep(condition, oldArray),这个操作将对oldArray 数组的每个元素进行遍历,如果当前处理元素符合条件condition,则加入到返回数组中 jQuery中的grep类似这样: function( elems, callback),elems是DOM元素集合,callback是实现selector的一些表达式函数,如果callback返回true则表明当前处理的元素符合selector表达式篇二:javaScript基础之——数组javaScript基础之——数组目录创建数组的方法 .................................................................. .. (3)数组的内置方法 .................................................................. .. (3)数组首尾位置的数据项添加及删除方法 (3)array.push( value,… ) --- 向数组的尾部添加值 (4)array.unshift( value,… ) --- 在数组头部插入一个元素 (4)array.pop( ) --- 删除并返回数组的最后一个元素 (5)array.shift( ) --- 将元素移出数组 (6)重排序方法 .................................................................. .. (6)array.reverse() --- 颠倒数组中元素的顺序 (7)array.sort( fn ) ---对数组元素进行排序 (7)数组的固定位置的增删改方法 .................................................................. (8)array.splice(start,deleteCount,value,...) --- 插入、删除或替换数组的元素 . (8)可以复制数组的方法 .................................................................. . (8)array.slice(start,end) --- 返回数组的一部分 (9)array.concat(value,…) --- 连接数组 (9)将数组转化为字符串的方法 .................................................................. . (10)array.join(separator) ---将数组元素连接起来以构建一个字符串 (10)array.toString() ---将数组转换成一个字符串 (11)array.toLocaleString() ---把数组转换成局部字符串 (11)数组的属性:length............................................................... (12)ECMAScript 5 添加的数组方法................................................................... (12)位置方法 .................................................................. (12)迭代方法 --- 不修改原数组 .................................................................. .. (13)归并方法 --- 迭代数组所有项,然后构建一个最终返回的值 (13)数组是复合数据类型(对象类型)的数据,它的数据索引为数字,从0开始,逐一递增,有个length属性,代表数组项的总数。
js array.sort排序原理

js array.sort排序原理JavaScript中的数组是一种特殊的数据类型,它允许您在单个变量中存储多个值。
Array.sort()方法是JavaScript中最常用的方法之一,可以将数组中的元素按照指定的排序顺序进行排序。
本文将介绍sort()方法的工作原理以及常见的排序算法。
1. sort()方法的工作原理sort()方法是一种在原地排序(in place sorting)的算法,也就是说,它会修改原来的数组而不是创建一个新的数组。
该方法接受一个可选的参数,即一个比较函数(compare function)。
如果省略此参数,则元素将按照字符串比较排序。
当sort()方法被调用时,它首先将数组元素转换为字符串,然后比较这些字符串,根据比较结果进行排序。
如果是数字或日期,则需要使用比较函数进行转换,以确保正确的排序顺序。
2. 排序算法sort()方法使用的排序算法通常是快速排序(Quicksort)或合并排序(Mergesort)。
这些算法在不同的情况下都可以很好地工作,具体取决于数据的类型和大小。
快速排序是一种排序速度非常快的算法,其基本思想是在数组中选择一个基准元素,将数组中的元素分成两个子数组,一个包含所有比基准元素小的元素,另一个包含所有比基准元素大的元素。
然后递归地对两个子数组执行相同的操作,直到所有子数组都只包含一个元素。
最后,所有子数组将合并成一个已排序的数组。
合并排序是另一种常用的排序算法,其基本思想是将数组分成两个或多个较小的子数组,然后递归地对每个子数组进行排序,最后将这些已排序的子数组合并成一个完整的排序数组。
3. 比较函数sort()方法的比较函数有两个参数,它们分别是要比较的值,比较函数根据该值返回一个负数、零或正数。
如果第一个参数小于第二个参数,则返回一个负数,如果两个参数相等,则返回零,如果第一个参数大于第二个参数,则返回一个正数。
以下是一个比较函数的示例:function compare(a, b) {if (a < b) {return -1;}if (a > b) {return 1;}return 0;}该函数将按照数字的顺序对数组进行排序,将较小的数字放在前面。
js arrays.sort()原理

一、js arrays.sort()原理在JavaScript中,数组是常用的数据结构之一,而sort()方法则是对数组中的元素进行排序的常用方法之一。
在实际开发中,对数组进行排序是非常常见的需求之一,而了解sort()方法的原理则能够帮助我们更好地理解其使用方法和效果。
sort()方法主要用于对数组元素进行排序,其默认排序顺序是根据字符串Unicode码点。
也就是说,默认情况下,sort()方法会将数组中的元素转换为字符串,然后按照Unicode码点的顺序进行排序。
二、sort()方法的基本使用在实际开发中,我们通常会使用sort()方法对数组中的元素进行排序,语法如下:```javascriptlet arr = [3, 1, 5, 2, 4];arr.sort();console.log(arr); // 输出结果为 [1, 2, 3, 4, 5]```在上面的例子中,我们创建了一个包含一些无序数字的数组arr,然后调用了sort()方法来对数组进行排序。
根据sort()方法的默认排序规则,数组元素会被转换为字符串,并按照Unicode码点进行排序,所以最终输出的结果是一个升序排列的数组。
三、sort()方法的自定义排序规则除了默认的排序规则外,sort()方法还可以接受一个比较函数作为参数,用于定义自定义的排序规则。
比较函数接受两个参数,分别表示当前比较的两个元素,根据比较函数的返回值来确定元素的排序顺序。
下面是一个使用比较函数对数组元素进行排序的例子:```javascriptlet arr = [3, 1, 5, 2, 4];arr.sort((a, b) => a - b);console.log(arr); // 输出结果为 [1, 2, 3, 4, 5]```在上面的例子中,我们传入了一个比较函数 `(a, b) => a - b` 作为sort()方法的参数,该比较函数用于对数组元素进行升序排序。
array常用方法

array常用方法数组(Array)是JavaScript中一种常用的数据类型,用于存储一系列有序的元素。
在JavaScript中,数组有一些常用的方法,包括:1. push():向数组末尾添加一个或多个元素,并返回新的长度。
2. pop():删除并返回数组的最后一个元素。
3. unshift():向数组的开头添加一个或多个元素,并返回新的长度。
4. shift():删除并返回数组的第一个元素。
5. splice():通过删除或替换现有元素或者添加新元素来修改数组,并返回被修改的元素。
6. sort():对数组的元素进行排序。
默认排序顺序是根据字符串Unicode码点。
7. reverse():颠倒数组中元素的顺序。
8. indexOf():返回指定元素在数组中的第一个索引,如果不存在则返回-1。
9. lastIndexOf():返回指定元素在数组中的最后一个索引,如果不存在则返回-1。
10. forEach():对数组的每个元素执行一次给定的函数。
11. map():对数组的每个元素执行一次给定的函数,并返回结果组成的新的数组。
12. filter():对数组的每个元素执行一次给定的函数,并返回结果为true的元素组成的新的数组。
13. some():对数组的每个元素执行一次给定的函数,如果函数对某个元素返回true,则返回true。
14. every():对数组的每个元素执行一次给定的函数,如果函数对所有元素都返回true,则返回true。
15. reduce():对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。
16. join():将数组的所有元素连接成一个字符串。
17. concat():用于合并两个或多个数组。
此方法不会更改现有数组,而是返回一个新数组。
18. slice():返回一个新的数组对象,这个对象是一个由开始和结束索引(不包括结束索引)指定的原数组的浅拷贝。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前面的话数组是一组按序排列的值,相对地,对象的属性名称是无序的。
从本质上讲,数组使用数字作为查找键,而对象拥有用户自定义的属性名。
javascript没有真正的关联数组,但对象可用于实现关联的功能Array()仅仅是一种特殊类型的Object(),也就是说,Array()实例基本上是拥有一些额外功能的Object()实例。
数组可以保存任何类型的值,这些值可以随时更新或删除,且数组的大小是动态调整的除了对象之外,数组Array类型可能是javascript中最常用的类型了。
而且,javascript 中的数组与其他多数语言中的数组有着相当大的区别。
本文将介绍javascript中的数组Array 类型创建数组有两种创建数组的方法:使用字面量语法和使用Array()构造函数【字面量】使用数组字面量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可var empty = []; //没有元素的数组var primes = [2,3,5,7,11]; //有5个数值的数组虽然javascript数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的是,javascript数组的每一项可以保存任何类型的数据var misc = [1.1,true, "a"]; //3个不同类型的元素数组字面量中的值不一定要是常量,它们可以是任意的表达式var base = 1024;var table = [base,base+1,base+2,base+3];它可以包含对象字面量或其他数组字面量var b = [ [1,{x:1,y:2}],[2,{x:3,y:4}] ];如果数组的元素还是数组,就形成了多维数组var a = [[1, 2], [3, 4]];[注意]使用数字字面量表示法时,不会调用Array构造函数【构造函数】有三种方式调用构造函数【1】没有参数,创建一个空数组//该方法创建一个没有任何元素的空数组,等同于数组直接量[]var a = new Array();【2】有一个数值参数,该参数用于指定数组的长度var a = new Array(10);console.log(a);//[]console.log(a[0],a.length);//undefined 10[注意]若存在一个其他类型的参数,则会创建包含那个值的只有一项的数组var a = new Array('10');console.log(a);//['10']console.log(a[0],a.length);//10 1【3】有多个参数时,参数表示为数组的具体元素var a = new Array(1,2,3);console.log(a);//[1,2,3]console.log(a[0],a[1],a[2]);//1 2 3使用Array()构造函数时,可以省略new操作符var a1 = Array();var a2 = Array(10);var a3 = Array(1,2,3);console.log(a1,a2,a3);//[] [] [1,2,3]数组本质数组是按次序排列的一组值,本质上,数组是一种特殊的对象typeof [1, 2, 3] // "object"数组的特殊性体现在,它的键名是按次序排列的一组整数(0,1,2…)。
由于数组成员的键名是固定的,因此数组不用为每个元素指定键名,而对象的每个成员都必须指定键名var arr = ['a', 'b', 'c'];console.log(Object.keys(arr));// ["0", "1", "2"]var obj = {name1: 'a',name2: 'b',name3: 'c'};数组是对象的特殊形式,使用方括号访问数组元素就像用方括号访问对象的属性一样javascript语言规定,对象的键名一律为字符串,所以,数组的键名其实也是字符串。
之所以可以用数值读取,是因为非字符串的键名会被转为字符串,然后将其作为属性名来使用o={}; //创建一个普通的对象o[1]="one"; //用一个整数来索引它//数值键名被自动转成字符串var arr = ['a', 'b', 'c'];arr['0'] // 'a'arr[0] // 'a'但是,一定要区分数组索引和对象的属性名:所有的索引都是属性名,但只有在0~232-2(4294967294)之间的整数属性名才是索引var a = [];//索引a['1000'] = 'abc';a[1000] // 'abc'//索引a[1.00] = 6;a[1] // 6[注意]单独的数值不能作为标识符(identifier)。
所以,数组成员只能用方括号法表示var arr = [1, 2, 3];arr[0];//1arr.0;//SyntaxError可以使用负数或非整数来索引数组。
但由于其不在0~2的32次方-2的范围内,所以其只是数组的属性名,而不是数组的索引,明显的特征是不改变数组的长度var a = [1,2,3];//属性名a[-1.23]=true;console.log(a.length);//3//索引a[10] = 5;console.log(a.length);//11//属性名a['abc']='testing';console.log(a.length);//11稀疏数组稀疏数组就是包含从0开始的不连续索引的数组【1】制造稀疏数组最直接的方法就是使用delete操作符var a = [1,2,3,4,5];delete a[1];console.log(a[1]);//undefinedconsole.log(1 in a);//false【2】数组的逗号之间可以省略元素值,通过省略元素值也可以制造稀疏数组var a =[1,,3,4,5];console.log(a[1]);//undefinedconsole.log(1 in a);//false[注意]省略的元素值和值为undefined的元素值是有区别的var a =[1,,3,4,5];console.log(a[1]);//undefinedconsole.log(1 in a);//falsevar a =[1,undefined,3,4,5];console.log(a[1]);//undefinedconsole.log(1 in a);//true如果在数组的末尾使用逗号时,浏览器之间是有差别的。
标准浏览器会忽略该逗号,而IE8-浏览器则会在末尾添加undefined值//标准浏览器输出[1,2],而IE8-浏览器输出[1,2,undefined]var a = [1,2,];console.log(a);//标准浏览器输出2,而IE8-浏览器输出3var a = [,,];console.log(a.length);足够稀疏的数组通常在实现上比稠密的数组更慢,内存利用率更高,在这样的数组中查找元素的时间与常规对象属性的查找时间一样长数组长度每个数组有一个length属性,就是这个属性使其区别于常规的JavaScript对象。
针对稠密(也就是非稀疏)数组,length属性值代表数组中元素的个数,其值比数组中最大的索引大1[].length //=>0:数组没有元素['a','b','c'].length //=>3:最大的索引为2,length为3当数组是稀疏数组时,length属性值大于元素的个数,同样地,其值比数组中最大的索引大1[,,,].length; //3(Array(10)).length;//10var a = [1,2,3];console.log(a.length);//3delete a[1];console.log(a.length);//3数组的特殊性主要体现在数组长度是可以动态调整的:【1】如果为一个数组元素赋值,索引i大于等于现有数组的长度时,length属性的值将设置为i+1var arr = ['a', 'b'];arr.length // 2arr[2] = 'c';arr.length // 3arr[9] = 'd';arr.length // 10arr[1000] = 'e';arr.length // 1001【2】设置length属性为小于当前长度的非负整数n时,当前数组索引值大于等于n的元素将从中删除a=[1,2,3,4,5]; //从5个元素的数组开始a.length = 3; //现在a为[1,2,3]a.length = 0; //删除所有的元素。
a为[]a.length = 5; //长度为5,但是没有元素,就像newArray(5)[注意]将数组清空的一个有效方法,就是将length属性设为0var arr = [ 'a', 'b', 'c' ];arr.length = 0;arr // []【3】将数组的length属性值设置为大于其当前的长度。
实际上这不会向数组中添加新的元素,它只是在数组尾部创建一个空的区域var a = ['a'];a.length = 3;console.log(a[1]);//undefinedconsole.log(1 in a);//false如果人为设置length为不合法的值(即0——232-2范围以外的值),javascript会报错// 设置负值[].length = -1// RangeError: Invalid array length// 数组元素个数大于等于2的32次方[].length = Math.pow(2,32)// RangeError: Invalid array length// 设置字符串[].length = 'abc'// RangeError: Invalid array length由于数组本质上是对象,所以可以为数组添加属性,但是这不影响length属性的值a['p'] = 'abc';console.log(a.length);// 0a[2.1] = 'abc';console.log(a.length);// 0数组遍历使用for循环遍历数组元素最常见的方法var a = [1, 2, 3];for(var i = 0; i < a.length; i++) {console.log(a[i]);}当然,也可以使用while循环var a = [1, 2, 3];var i = 0;while (i < a.length) {console.log(a[i]);i++;}var l = a.length;while (l--) {console.log(a[l]);}但如果数组是稀疏数组时,使用for循环,就需要添加一些条件//跳过不存在的元素var a = [1,,,2];for(var i = 0; i < a.length; i++){if(!(i in a)) continue;console.log(a[i]);}还可以使用for/in循环处理稀疏数组。