Page 214 - 你不知道的JavaScript(下卷)
P. 214
a[1] = 20;
a[2] = 30;
a.map( function(v){
console.log( v );
} );
// 10 20 30
a.join( "-" );
// "10-20-30"
不能对 TypedArray 使用不合理的 Array.prototype 方法,比如修改器
(splice(..)、 push(..) 等)和 concat(..)。
要清楚 TypedArray 中的元素是限制在声明的位数大小中的。如果视图给一个 Uint8Array
的某个元素赋值为大于 8 位的值,这个值会被折回(wrap around)来适应其位宽。
这可能会引起问题,比如,如果你要把 TypedArray 中的值平方。考虑:
var a = new Uint8Array( 3 );
a[0] = 10;
a[1] = 20;
a[2] = 30;
var b = a.map( function(v){
return v * v;
} );
b; // [100, 144, 132]
对于值 20 和 30,平方值就会溢出。要解决这样的局限,可以使用 TypedArray#from(..)
函数:
var a = new Uint8Array( 3 );
a[0] = 10;
a[1] = 20;
a[2] = 30;
var b = Uint16Array.from( a, function(v){
return v * v;
} );
b; // [100, 400, 900]
关于与 TypedArray 共享的 Array.from(..) 方法的更多信息,参见 6.1.2 节,特别是“映
射”那一小节解释了作为第二个参数的映射函数。
还有很有趣的一点要考虑,与普通数组一样,TypedArray 也有一个 sort(..) 方法,但是这
个方法默认使用数字排序方法,而不是强制转换为字符串之后进行字母序比较 。举例来说:
集合 | 191
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权