js创建Array数组保存数据,数据是存放在哪里的呢?容量有上限的吗?

JavaScript025

js创建Array数组保存数据,数据是存放在哪里的呢?容量有上限的吗?,第1张

var arr =new Array()

定义数组是用=new Array()的。

但是在你定义数组比如abc的时候,可以用

var abc = []

var abc = new Array()

以上两个是等价的。

如果

var abc= new Array(2)

那么

abc = [null,null]

如果

var abc = new Array(2,3,4)

那么

abc = [2,3,4]

Javascript自身提供了一些操作,可以对数组实现一定的处理,例如排序、连接、堆栈等等,下面做一下简单的介绍。

1,concat(arrayName2, arrayName3, …, arrayNameN) ,将数组本身和另外一个或多个数组进行连接,例如:

var arr1=[”a”,”c”]

var arr2=[”b”,”d”]

var arr22=[”e”,”f”]

var arr3=arr1.concat(arr2,arr22)

document.write(arr3)//结果显示为:a,c,b,d,e,f

2,join(separator),通过间隔符将数字连接为字符串,例如:

var arr1=[”a”,”b”,”c”,”d”,”e”]

var arr1Str=arr1.join(”-”)

document.write(arr1Str)//结果显示为:a-b-c-d-e

3,pop()/push(element1, …, elementN) ,实现了堆栈的操作,push是入栈,pop是出栈,例如:

var arr1=[”a”,”b”]

arr1.push(”c”,”d”)

document.write(arr1)//结果为:a,b,c,d

var value=arr1.pop()

document.write(value)//结果为:d

4,reverse() ,将数组反向排序,例如:

var arr1=[”a”,”b”,”c”]

arr1.reverse()

document.write(arr1)//结果为:c,b,a

5,sort(compareFunction),按照指定的排序规则进行排序,如果参数为空,则按照默认的字母和数字进行排序,例如:

function mySort(o1,o2){

if(o1.length>o2){

return 1

}

return -1

}

var arr1=[”a”,”c”,”bd”]

arr1.sort()

document.write(arr1)//结果为:a,bd,c

arr1.sort(mySort)

document.write(arr1)//结果为:bd,c,a

6,shift() /unshift,将数组的第一个值取出(或者将值插入到数组第一个位置),并且数组长度缩短(加长),例如:

var arr1=[”a”,”b”,”c”]

var value=arr1.shift()

document.write(value)//输出为:a

document.write(arr1)//输出为:b,c

var value2=arr1.unshift(”g”)

document.write(value)//IE输出为undefined,Firefox输出为3

document.write(arr1)//输出为:g,b,c

7,slice(begin[,end]) ,类似字符串的substring方法,就是截取数组,例如:

var arr1=[”a”,”b”,”c”]

var arr2=arr1.slice(0,2)

document.write(arr2)//输出为:a,b

8,splice(index, howMany, [element1][, …, elementN]) ,从指定的位置(index)开始,删除后面多个(howMany)数组的值,并从删除处开始依次插入新的值,例如:

var arr1=[”a”,”b”,”c”]

arr1.splice(1,1,”m”,”n”,”o”)

document.write(arr1)//输出为:a,m,n,o,c

应该说,Javascript本身对数组提供的操作能力,还是不错的,但是在实际应用中,我们需要对数组做更多的操作,例如Java、PHP、.NET中对数组都提供了强大的操作能力,而且许多优秀的开源项目中,也提供了对数组的许多操作,但是Javascript这方面还需要进一步加强。

为了对数组提供更多的操作,JsJava定义了许多类,来加强对数组的操作,介绍如下:

1,jsjava.util.Arrays类,仿照Java的Arrays类,对数组提供了一些高效的操作,例如:

var list=Arrays.asList([”a”,”b”,”c”])//通过数组创建一个不可变的列表

而且通过binarySearch,提供了二分法搜索的一个实现,其它的请参考JsJavaDoc

2,jsorg.apache.commons.lang.ArrayUtils类,该类的实现是参考Apache优秀的commons-lang开源项目实现的,实现其中的所有功能,例如对数组进行插入、删除、搜索、填充、截取等等,例如:

var arr=ArrayUtils.clone([0,1,2,9,0])

document.write(arr+”<br>”)

document.write(ArrayUtils.subarray(arr,0,3)+”<br>”)

arr.reverse()

document.write(arr)

显示结果为:

0,1,2,9,0

0,1,2

0,9,2,1,0

3,jsorg.eob.lang.MultiDimensionArrayUtils类,该类实现了对多维数组的创建支持,例如可以方便创建二维和三维数组,具体可以参考文章《在Javascript之中如何创建多维数组》

4,org.apache.commons.math.linear.RealMatrixImpl类,实现对矩阵的操作,矩阵实际上就是多维数组,即实现了对多维数组的支持,例如可以实现多维数组的加、减、乘、除等操作,还有数学运算中对矩阵的其它操作,具体可以参考JsJavaDoc。

JsJava是对Javascript语言最好的扩展和延伸,它与目前流行的prototype.js的方向是不一样的,如果你正在构建web应用,那么JsJava将是你界面应用最好的支撑。

在JS中变量被分为基本类型变量和引用类型变量。1、基本类型变量用八字节内存,存储基本数据类型(数值、布尔值、null和未定义)的值。2、引用类型变量则只保存对对象、数组和函数等引用类型的值得引用(即内存地址)。JS字符串的长度受到下标限制。理论最大长度是2^53-1(即js中可表达的最大安全整数)。2^53是多大呢?大约9PB。根据统计,中国2014年所有出版物(不计复本)不到2000亿字,也就是400GB而已。按此推算,不要说存一个txt了,中国自有甲骨文以来所有的书、各类出版物字数加在一起估计也不可能超过100TB,也就是0.1PB。当然啦,实际引擎是不可能允许分配那么大的字符串的,你的电脑也没那么大存储不是。V8的heap上限只有2GB不到,允许分配的单个字符串大小上限更只有大约是512MB不到。JS字符串是UTF16编码保存,所以也就是2.68亿个字符。FF大约也是这个数字最近项目有个需求要用js计算一串字符串写入到localStorage里所占的内存,众所周知的,js是使用Unicode编码的。而Unicode的实现有N种,其中用的最多的就是UTF-8和UTF-16。因此本文只对这两种编码进行讨论。