.toSorted() 仅适用于浏览器

Mic*_*tly 15 javascript browser

我正在解决 LeetCode 问题,我想将一个变量分配给数组的排序副本。

sortedHeights = heights.toSorted()
Run Code Online (Sandbox Code Playgroud)

但是,这会返回以下错误heights.toSorted is not a function我在MDN上查了这个问题,发现了以下代码片段:

const months = ["Mar", "Jan", "Feb", "Dec"];
const sortedMonths = months.toSorted();
console.log(sortedMonths); // ['Dec', 'Feb', 'Jan', 'Mar']
console.log(months); // ['Mar', 'Jan', 'Feb', 'Dec']
Run Code Online (Sandbox Code Playgroud)

我尝试在 WebStorm 上运行此代码片段,但出现了相同的错误,但是,当我在浏览器中运行它时,它可以工作。这是为什么?

小智 26

在回答这个问题时,Array.prototype.toSorted()Node.js 版本 20+ 支持。大多数开发人员使用 Node.js LTS 版本(当前版本 18)。因此,如果您在 WebStorm 中使用 Node.js 版本 19、18 或更低版本,.toSorted()则不支持。

对于 LeetCode 的情况,我发现它当前使用 Node.js 16来运行您的代码。因此,您可能想暂时诉诸此替代(且实际上等效)代码:

sortedHeights = [...heights].sort()
Run Code Online (Sandbox Code Playgroud)

另请注意,.toSorted()当前在最新版本的 Chrome 和 Edge(从版本 110 开始)、Safari(从版本 16 开始)、Firefox(从版本 115 开始)和其他一些浏览器中受支持,旧版本不支持 - 以防万一您做出假设它适用于所有浏览器。

检查Array.prototype.toSorted() MDN 浏览器兼容性部分以获取最新的支持详细信息。


小智 17

.toSorted()是一种新方法。正如您在链接的 MDN 文档中看到的,node.js 尚不支持它。