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);