Page 215 - 你不知道的JavaScript(下卷)
P. 215

var a = [ 10, 1, 2, ];
                   a.sort();                               // [1,10,2]

                   var b = new Uint8Array( [ 10, 1, 2 ] );
                   b.sort();                               // [1,2,10]

               就像 Array#sort(..) 一样,TypedArray#sort(..) 接受了一个可选比较函数参数,它们的工
               作方式也是完全一样的。

               5.2 Map


               如果你的 JavaScript 经验丰富的话,应该会了解对象是创建无序键 / 值对数据结构 [ 也称为
               映射(map)] 的主要机制。但是,对象作为映射的主要缺点是不能使用非字符串值作为键。

               举例来说,考虑:

                   var m = {};

                   var x = { id: 1 },
                       y = { id: 2 };

                   m[x] = "foo";
                   m[y] = "bar";

                   m[x];               // "bar"
                   m[y];               // "bar"

               这里发生了什么? x 和 y 两个对象字符串化都是 "[object Object]",所以 m 中只设置了一
               个键。
               有些人通过维护平行的非字符串键数组和值数组来实现伪 map,比如:

                   var keys = [], vals = [];

                   var x = { id: 1 },
                       y = { id: 2 };

                   keys.push( x );
                   vals.push( "foo" );

                   keys.push( y );
                   vals.push( "bar" );

                   keys[0] === x;                // true
                   vals[0];                      // "foo"

                   keys[1] === y;                // true
                   vals[1];                      // "bar"

               当然,你不想自己维护这两个平行数组,所以可以定义一个数据结构,其中包含自动管理


               192   |   第 5 章
                                图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权
   210   211   212   213   214   215   216   217   218   219   220