Javascript UINT8阵列和UINT8 ClampedArray之间的差异

Javascript UINT8阵列和UINT8 ClampedArray之间的差异,javascript,arrays,memory-management,clamp,Javascript,Arrays,Memory Management,Clamp,JavaScript中的Uint8Array和uint8clampedaray之间有什么区别? 我知道uint8clampedaray与画布一起用于像素操作。这是为什么?好处是什么?看看和的示例,看起来区别在于赋值时如何处理值 如果试图将钳制数组中的一个元素设置为范围0-255之外的任何值,它将默认为0或255(取决于该值是更小还是更大)。正常的Uint8Array数组只取值的前8位 示例: var x = new Uint8ClampedArray([17, -45.3]); console.

JavaScript中的
Uint8Array
uint8clampedaray
之间有什么区别?
我知道
uint8clampedaray
与画布一起用于像素操作。这是为什么?好处是什么?

看看和的示例,看起来区别在于赋值时如何处理值

如果试图将钳制数组中的一个元素设置为范围
0-255
之外的任何值,它将默认为0或255(取决于该值是更小还是更大)。正常的
Uint8Array
数组只取值的前8位

示例:

var x = new Uint8ClampedArray([17, -45.3]);
console.log(x[0]); // 17
console.log(x[1]); // 0
console.log(x.length); // 2

var x = new Uint8Array([17, -45.3]);
console.log(x[0]); // 17
console.log(x[1]); // 211
console.log(x.length); // 2

还要注意的是,
Uint8Array([0.9])
[0]
,但是
uint8clampedaray([0.9])
[1]
,即夹紧版本使用舍入,但基本版本使用地板。上面提到的OP用于画布中的像素值,这是饱和算法的快捷方式吗?@Felix,因此,
Uint8Array
的性能更高,因为不需要进行边界检查?我认为Uint8Array会更快-除非您对图形使用钳制功能,在这种情况下可能会更快。@llya这些用于图像/视频/音频处理。其主要特点是:它从不溢出/下溢。当您试图增加图像中的亮度时:最大亮度(255)+1应为255,而不是溢出为零。