Javascript ecmascript-6函数用于反转数组中的值

Javascript ecmascript-6函数用于反转数组中的值,javascript,ecmascript-6,Javascript,Ecmascript 6,为什么这两个代码做的不一样 有人能给我解释一下把戏在哪里吗 函数随机化(arr){ 对于(变量i=0;i

为什么这两个代码做的不一样

有人能给我解释一下把戏在哪里吗

函数随机化(arr){
对于(变量i=0;i日志(随机化([1,2,3,4,5])使用以下命令,您正在交换
temp
newR
,但是原始数组项保持不变,不会被交换。因此,输出与输入保持相同

 let temp = arr[i];   
 let newR = arr[random];
 [temp, newR] = [newR, temp];
使用后者,您将交换数组项,因此,数组将得到更新

[arr[i], arr[random]] = [arr[random], arr[i]];

因为在JavaScript中,不能通过引用传递原语值,只能通过值传递。只能通过引用指定复合值(对象、数组)

let arr = ["one", 2, {name: "foo"}];
如果你这样做

let item = arr[0];
那么您只是将其复制为值。 更改
不会修改
arr[i]
的值,因为没有对它的引用

但是如果你愿意做以下的事情

let obj = arr[2];
您将在第三个位置有一个对对象的引用。 您可以使用不同的内容重新分配obj,这不会改变
arr[2]
。但是,如果访问
name
属性并对其进行更改,则表示您正在更改被引用对象的属性

obj.name = "bar";
console.log(obj === arr[2]);
console.log(arr[2].name === "bar");

obj = "something else";
console.log(arr[2] !== obj);