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) 专享 尊重版权
   209   210   211   212   213   214   215   216   217   218   219