在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的错误吗?
答案 0 :(得分:3)
Firefox是Array's generics method于几年前在JS 1.6中引入的,但正如链接页面所述:
“这些不是ECMAScript标准的一部分,不支持它们 通过非Gecko浏览器。”
并且:
数组泛型是非标准的,已过时,并将在不久的将来删除。
因此,您应避免使用它们。
更重要的是,它不能解决您的问题。您说过要避免更改原始数组,但是Array.reverse(arr)
与arr.reverse()
等效,因此无论如何都要对原始数组进行突变。
如果要避免这种情况,则应创建一个副本。如果您只需要浅拷贝,则可以执行以下操作:
let arr = [0, 1];
let reversed = [...arr].reverse();
console.log(arr, reversed); // [0, 1], [1, 0]
答案 1 :(得分:0)
sal
在Chrome(以及某些其他浏览器,例如Safari)中不是静态方法。您应该这样:
Array.prototype.reverse