我有一个snippet code:
let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;
a[0] = 8;
console.log(ro); //expext to be [1,2,3,4] not ok
console.log(a);//expext to be [8,2,3,4] ok
当我改变数组a
时,readonlyArray ro
被改变了吗?为什么?
我有一个snippet code:
let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;
a[0] = 8;
console.log(ro); //expext to be [1,2,3,4] not ok
console.log(a);//expext to be [8,2,3,4] ok
当我改变数组a
时,readonlyArray ro
被改变了吗?为什么?
2条答案
按热度按时间slmsl1lt1#
由于您是从
a
本身创建ro
,因此ro
和a
在内存中将具有相同的引用,因此无论何时更改其中一个,另一个都会对另一个生效。如何在不传递引用的情况下互相创建数组?
.slice()
Array.from()
方法,该方法生成现有数组的浅层副本kgqe7b3p2#
使用
Array.from()
或Spread运算符创建副本对于只读,请尝试使用
Object.freeze()