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) 专享 尊重版权