查看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的无符号字节范围。