2016-02-13 58 views
0

为什么map()操作在不同类型的数组上运行时会生成不同的输出?不同阵列上map()的不同结果

我认为literalobj下面是相同的类型;为什么产生的数组不同?为什么非文字数组连接到一个元素?

为什么类型化数组不能创建一个字符串数组,而是返回原始类型数组?是否有规范要求映射操作无法将类型化数组转换为其他类型?

var literal = [1, 2, 3]; 
var obj = new Array([1, 2, 3]); 
var typed = new Uint32Array([1, 2, 3]); 


console.log(literal.map(String)); 
console.log(obj.map(String)); 
console.log(typed.map(String)); 

输出

Array [ "1", "2", "3" ] 
Array [ "1,2,3" ] 
Uint32Array [ 1, 2, 3 ] 

我运行Firefox 44.0 https://jsfiddle.net/6c8p465r/1/

+4

'new Array'并不真的接受这样的数组,你最终只有一个索引的数组,并且'Uint..'数组不能包含字符串 – adeneo

+3

**第二种情况:** var'obj'是二维数组,因此在调用'map'之前,在数组上调用'toString()'。 **第三种情况:**'Uint32Array'如名称所示,存储无法转换为数字的**整数数组**。 – Tushar

+0

有错字^^^^:最后不能转换为** String ** _。 _Timeout:现在无法编辑:(_ – Tushar

回答

2

首先,使用文字阵列,或者使用数组构造会产生相同的结果,但你没有使用构造函数正确。

以下内容将在数组内部生成一个数组,这就是为什么只有一个数组以字符串格式返回给您的原因。所以当你在这个地图上调用map时,整个被映射的条目就是内部数组。

new Array([1, 2, 3]); // Produces [[1, 2, 3]] 

创建阵列要使用Array构造函数的方式正确的方法是在价值传递的只是参数:

new Array(1, 2, 3); // Produces [1, 2, 3] 

Uint32Array有几件事情会与它必须先被理解。

  1. 它拥有无符号整数(不能转换为字符串)
  2. 它的构造是从Array构造不同

如果检查出Uint32ArrayMozilla examples,你会看到,当使用这种方式时,值的数组预期会传递给构造函数。