str.reverse 函数反转全局范围内的每个数组

str.reverse function reversing every array in global scope

无法判断我的浏览器控制台是否有问题,或者发生了什么,因为我在使用反向功能时从未遇到过问题。

当我将以下内容放入 chrome 控制台时,

var a = ['one', 'two', 'three'];
var reversed = a.reverse(); 

console.log(a);        // ['one', 'two', 'three']
console.log(reversed); // ['three', 'two', 'one']

我明白了

Array#reverse 就地工作,不会创建新数组。行

var reversed = a.reverse(); 

反转 a 并设置 reversed 引用同一个数组。

在此示例中,您可以看到将项目添加到 reversed 也会影响 a,因为它们引用相同的数组:

var a = ['one', 'two', 'three'];
var reversed = a.reverse(); 

reversed.push(1000); // add something to reversed

console.log(a);        // ['three', 'two', 'one', 1000]
console.log(reversed); // ['three', 'two', 'one', 1000]

要创建新数组,请在原始数组上使用 Array#slice,然后反转数组:

var a = ['one', 'two', 'three'];
var reversed = a.slice().reverse(); 

console.log(a);        // ['one', 'two', 'three']
console.log(reversed); // ['three', 'two', 'one']

反向函数改变当前数组。将 reversed 声明为 a.reverse() 后,数组 a 也会发生变异。因此,您将为 console.log(a)console.log(reversed)

打印出 ['three', 'two', 'one']

您想做的是克隆一个:

var a = ['one', 'two', 'three']; var reversed = a.slice().reverse();

console.log(a); // ['one', 'two', 'three'] console.log(reversed); // ['three', 'two', 'one']