Uint8ArrayとUint8ClampedArrayの違い

W3Cによれば、この違いは値がclampされるかどうからしい。clampというのは、範囲の指定されたintにその範囲を超えた値を代入したとき、通常であればmoduloで処理するところを、範囲の上限の値を代わりに代入する、というものだ。

// NOTE: node.js doesn't support Uint8ClampedArray

"use strict";
// normal typed array
var a = new Uint8Array(1);
a[0] = 1000;
console.log(a[0]); // 1000 % 0xFF => 232

// clamped typed array
var a = new Uint8ClampedArray(1);
a[0] = 1000;
console.log(a[0]); // uint8 max => 255

どういういきさつで導入されたのかわからないが、不要に複雑にしすぎている気がする。