JavaScript之数组
来源:互联网 发布:windows xp ping不通 编辑:程序博客网 时间:2024/06/03 19:30
概述
JavaScript数组的索引是基于零的32位数值,第一个元素的索引为0,最多可能的索引为(2^32-2),针对稀疏矩阵,length比所有元素的索引都大
创建数组
数组直接量的语法允许有可选的结尾逗号,故[,,]只有两个元素
new Array(10) //长度为10的空数组
数组元素的读和写
数组是对象的特殊形式
所有的索引都是属性吗,但只有0~2^ 32-2之间的整数属性名才是索引。所有的数组都是对象,可以为其创建人意名字的属性。但如果使用的属性是数组的索引,则会根据需要更新其length值
可以使用附属或非整数来索引数组,这种情况下,数值转换为字符串然后当属性名来用,这样就是常规的对象属性,而不是数组的索引。同样,如果是使用了非负整数的字符串,就当作数组索引,而非对象索引。当使用一个浮点数和一个整数相等时情况也一样。
事实上数组索引仅仅是对象属性名的一种特殊类型,这意味着JavaScript数组没有越界错误。当试图查找不存在的属性,返回undefined
当一个数组缺失继承了元素或者使用了元素的getter和setter方法,则很可能使用非优化路径(类似于常规对象查找)
稀疏矩阵
若矩阵为稀疏,则length大于元素个数
足够稀疏的数组通常在实现上比稠密的数组更慢、内存利用率更高,在这样的数组中查找元素的时间与常规对象属性的查找时间一样长
当在数组直接量中省略值时不会产生稀疏数组——省略的元素值为undefined,而不是不存在
数组长度
每个数组有一个length,就是这个属性时期区别于常规的JavaScript对象
当数组是稀疏的时,length属性值大于元素的个数。而且关于此可以说一切也就是数组长度必然大于任意一个索引值。
当length设置为一个小于当前长度的非负整数n时,当前数组中国年那些索引值大于等于n的元素将被删除,
数组元素的添加和删除
delete操作并不影响数组长度,而数组进行delete操作,就会变为稀疏数组
数组遍历
通常数组元素的便利是生序的,但不必然如此。
当一个数组同时拥有对象属性和数组元素,返回的属性名很可能是按照创建顺序而不是数值的大小顺序
多维数组
JavaScript不支持真正的多维数组,但可以用数组的数组来近似
数组方法
Array.join()方法是String.split()方法的逆向操作,后者是将字符串分割成若干块来创建一个数组
Array.reverse()方法将数组中的元素点到顺序,返回逆序的数组。它采取了替换;换句话说,他不通过重新排列的元素创建新的数组,而是在原先的数组中重新排列(改变原数组)
不带参数的sort调用sort()时,数组元素以字幕版顺序排序(如果需要会转化为字符串比较)
若数组包含undefined元素,则会被拍到数组尾部
为了按照其他方式而非字母表顺序进行数组操作,必须给sort传入一个比较函数(返回一个数值,大于0则是a>b)
concat不会递归扁平化数组的数组
x=[1,2,3].concat(4,[4,[7,3]])//(6) [1, 2, 3, 4, 4, Array(2)]
splice如果省略第二个参数,则从起始点到数组结尾所有元素都被删除,splice返回一个被删除的数组,若干没有删除元素则返回空数组
区别于concat,splice会插入数组本身而不是数组的元素
unshift()返回数组长度
shift()返回删除的元素
当使用多个参数调用unshift()时它的行为令人惊讶,参数时一次性插入。
数组的toString()方法会将每个元素都变为字符串,和不加任何参数的join是一样的
ES5中的数组方法
如果是稀疏数组,对不存在的元素不调用传递的函数。在大多数情况下,调用提供的函数使用3个参数:数组元素,元素的索引和数组本身。大多数ES5数组的方法的第一个参数是函数,第二个参数是可选的。如果有第二个参数,则调用的函数被看作是第二个参数的调用方法,也就是说第二个参数作为this
forEach()无法在所有元素传给函数前就终止遍历,若要强行终止,只能选择抛出异常。
map()返回的是新数组:它修改调用数组,如果原数组是稀疏数组,返回的也是相同方式的稀疏数组。
filter()会跳过稀疏数组中缺少的元素,其返回值总是稠密的。为了压缩稀疏数组的空缺,可以直接返回true
一旦every()或some()确认该返回什么值她们就会停止遍历数组元素。根据数学上的惯例,在空数组上调用时,every()返回true,some()返回false
化简函数的任务就是通过把两个值组合或化简为一个值,并返回化简后的值。第二个(可选)参数时传递给函数的初始值。
reduce()函数的数组元素、元素索引和数组本身将作为第2-4的参数传入,第一个为截止目前的化简值。
在空数组上,不带初始值参数调用reduce()将导致类型错误异常。如果调用的时候只有一个值——数组只有一个元素且无初始值或数组为空且有一个初始值,则reduce()只是简单地返回那个址erbium调用化简函数
reduce()和reduceRight()都能接受一个可选参数,它指定化简函数的this值
数组类型
给定一个未知的对象,判断是否为数组用Array.isArray()函数
作为数组的字符串
字符串是不可变值,故当把它们看作数组时,是制度的。如push().sort().reverse()和splice()等数组方法会改变数组,在字符串上是无效的。不仅如此,使用数组方法来修改字符串会导致错误——出错时无提示
- javascript对象之javascript数组
- JavaScript之数组Array
- JavaScript之内部数组
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- JavaScript性能之 数组
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组
- javascript之数组操作
- javascript之数组操作
- javascript之101数组
- [FPGA]如何使用SignalTap观察wire与reg值
- 质数的和(多种方案)
- Ubuntu进行mysql集群
- softmax、GLM
- MyEclipse快捷编辑技巧
- JavaScript之数组
- Caused by: There is no result type defined for type 'json' mapped with name 'success'. Did you mean
- 树莓派更换国内源
- java基础——数据类型,变量,运算符,字符串,输入输出,数组,大数值
- 438. Find All Anagrams in a String
- OpenCV之Python学习笔记
- C/C++求职者必备的20道面试题
- 远程桌面连接树莓派
- STL空间配置器之内存池技术