js中的值!

数组

和其他强类型语言不同,在 JavaScript 中,数组可以容纳任何类型的值,可以是字符串、 数字、对象(object),甚至是其他数组(多维数组就是通过这种方式来实现的):

var a = [ 1, "2", [3] ];

a.length; // 3

a[0] === 1; // true

a[2][0] === 3; // true

对数组声明后即可向其中加入值,不需要预先设定大小:

使用 delete 运算符可以将单元从数组中删除,但是请注意,单元删除后,数 组的 length 属性并不会发生变化

在创建“稀疏”数组时要特别注意:

上面的代码可以正常运行,但其中的“空白单元”(empty slot)可能会导致出人意料的结 果。a[1] 的值为 undefined,但这与将其显式赋值为 undefined(a[1] = undefined)还是 有所区别。

数组通过数字进行索引,但有趣的是它们也是对象,所以也可以包含字符串键值和属性 (但这些并不计算在数组长度内):

这里有个问题需要特别注意,如果字符串键值能够被强制类型转换为十进制数字的话,它 就会被当作数字索引来处理。

在数组中加入字符串键值 / 属性并不是一个好主意。建议使用对象来存放键值 / 属性值, 用数组来存放数字索引值。

类数组

有时需要将类数组(一组通过数字索引的值)转换为真正的数组,这一般通过数组工具函数(如 indexOf(..)、concat(..)、forEach(..) 等)来实现。

例如,一些 DOM 查询操作会返回 DOM 元素列表,它们并非真正意义上的数组,但十分 类似。另一个例子是通过 arguments 对象(类数组)将函数的参数当作列表来访问(从 ES6 开始已废止)。

工具函数 slice(..) 经常被用于这类转换:

如上所示,slice() 返回参数列表(上例中是一个类数组)的一个数组复本。

用 ES6 中的内置工具函数 Array.from(..) 也能实现同样的功能:

var arr = Array.from( arguments );