是(new Uint8Array(1))[0] = 0x100未定义的结果?

时间:2014-02-16 22:58:41

标签: javascript typed-arrays

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

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

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

Chrome正在返回0x100而不是0,但是我可以相信此结果是否一致?

1 个答案:

答案 0 :(得分:3)

你在这做什么:

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的原样。