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

Javascript (新Uint8Array(1))[0]=0x100的结果是否未定义?,javascript,typed-arrays,Javascript,Typed Arrays,从中可以看出,以下行为似乎没有明确定义: 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 array = new Uint8Array( 1 );
var result = ( array[ 0 ] = 0x100 );

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

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

您在这里做的是:

var result = ( array[ 0 ] = 0x100 );
实际上与同时使用相同的值设置数组和结果相同(简写)(括号并不重要,因为0x100是正在求值并传递给结果的值):

或扩大:

array[ 0 ] = 0x100;
var result = 0x100;
所以很明显,在这种情况下,
结果将是0x100(256)

但是数组的内容是0,如果直接记录,可以看到:

console.log(array[ 0 ]);
(如果使用的是
uint8clampedaray
,则该值将为0xff或255)


因此,在这种情况下,结果将是一致的,但通过传递与结果变量和值集相关的数组。数组也将被设置,但该值适合无符号字节范围,而结果变量的值为原样。

我不确定。在C++中,假设B是一个对象,<代码> int=b= 0x100会做一些类似的事情:<代码> A= B.运算符=(0x100)< /代码>。如果此运算符重载返回的不是
0x100
,那么A将不等于最右边的值。既然这样一个概念看起来并不是不连贯的,我只想在JS中找到它。你会有一个标准的参考来确认你的答案吗?@MaëlNison小提琴确认了我的答案,你可以在控制台中看到。由于没有进行比较,括号将不会返回布尔值,而是返回设置值(0x100)。JS使用C语法,但与C本身不相关(例如,它是无类型和动态的)。当然,正如我在自己测试它的问题中所写的,我更想寻找一个学术答案:)但你是对的,我在上检查了它,它清楚地表明,在
lref=rval
情况下,底层
PutVal(lref,rval)
操作不返回任何内容,整个表达式的结果应该是
rval
本身。
console.log(array[ 0 ]);