为什么map()操作在不同类型的数组上运行时会生成不同的输出?
我认为下面的literal
和obj
属于同一类型;为什么生成的数组有所不同?为什么非文字数组连接到一个元素?
为什么类型化数组不会创建字符串数组,而是返回原始类型数组?是否有规范要求地图操作不能将类型化数组转换为其他类型?
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/
答案 0 :(得分:2)
首先,使用文字数组或使用Array构造函数会产生相同的结果,但是你没有正确使用构造函数。
以下将在数组内部生成一个数组,这就是为什么你只能以字符串格式返回一个数组。因此,当您在此上调用map时,正在映射的整个条目是内部数组。
subtitle: {
text: function () {
lastVal = this.yData[this.yData.length - 1];
return 'Last Value: ' + lastVal;
}
},
使用Array构造函数创建数组的正确方法是将值作为参数传递:
new Array([1, 2, 3]); // Produces [[1, 2, 3]]
new Array(1, 2, 3); // Produces [1, 2, 3]
有一些事情需要首先理解。
Uint32Array
构造函数如果您查看Array
上的Mozilla examples,您会看到一个值数组在使用它时会被传递到构造函数中。