运行在Firefox的控制台以下:Array.reverse([0,1]);
结果:[1,0]
在Chrome再次运行:
Array.reverse is not a function
我整点努力,这是我想要扭转数组到其自身的副本,这样就不会改变原来的。我的问题:该浏览器有正确的行为?
在我看来,since reverse() is supposed to be on Array.prototype,Firefox是错误的。不过,Firefox的行为是比较有用的。所以这是一个Firefox的错误?
火狐推出年前Array's generics method,在JS 1.6,但在链接页面中提到:
“这些都不是的ECMAScript的标准组成部分,它们不是由非壁虎浏览器的支持。”
和:
数组泛型是非标准的,过时,并将在不久的将来移除。
因此,你应该避免使用它们。
更重要的是,它并没有解决问题。你说,你想避免改变原有的,但Array.reverse(arr)
相当于arr.reverse()
,所以你无论如何变异原始数组。
如果你想避免这种情况,你应该创建一个副本。如果你只需要一个浅拷贝,你可以这样做:
let arr = [0, 1];
let reversed = [...arr].reverse();
console.log(arr, reversed); // [0, 1], [1, 0]
Array.prototype.reverse
不是在铬一个静态方法(和其他一些浏览器,例如Safari浏览器)。你应该做的是这样的:
console.log([0, 1].reverse());