查看spec时,似乎没有明确定义以下行为:

var array = new Uint8Array( 1 );
var result = ( array[ 0 ] = 0x100 );

// Is result === 0x100 or 0 ?


Chrome返回的是0x100而不是0,但是我可以相信这个结果是一致的吗?

最佳答案

您在这里做什么:

var result = ( array[ 0 ] = 0x100 );


实际上与同时将两个数组和结果同时设置为相同的值(简称)相同(括号无关紧要,因为0x100是要评估并传递给结果的那个):

var result = array[ 0 ] = 0x100;


或扩展:

array[ 0 ] = 0x100;
var result = 0x100;


因此显然result在这种情况下为0x100(256)。

但是该数组的内容为0,如您直接登录该数组所见:

console.log(array[ 0 ]);


(如果您使用的是Uint8ClampedArray,则该值为0xff或255)。

Fiddle

因此,在那种情况下,结果将是一致的,但相对于结果变量和值集绕过了数组。数组也将被设置,但是该值适合结果var的无符号字节范围。

07-26 01:29