我应该在 Math.max(...arr) 中使用啥来代替 Chrome 的扩展运算符?

Posted

技术标签:

【中文标题】我应该在 Math.max(...arr) 中使用啥来代替 Chrome 的扩展运算符?【英文标题】:What should I use instead of spread operator for Chrome in Math.max(...arr)?我应该在 Math.max(...arr) 中使用什么来代替 Chrome 的扩展运算符? 【发布时间】:2016-01-05 08:46:49 【问题描述】:

我知道 Chrome 浏览器不支持扩展运算符。现在我有了这段代码:

var arr = [1, 2, 3];
var max = Math.max(...arr);
console.log('Max: '+ max);

上面的代码在 Chrome 中总是给我这个错误(但适用于 Mozilla 和 Safari):

Uncaught SyntaxError: Unexpected token ...

我在网上搜索了很多,但我找不到任何有用的答案。所以请帮助我找出我应该使用什么来代替 chrome 中的扩展运算符来执行代码中执行的相同任务。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

试试

Math.max.apply(Math, arr);

【讨论】:

【参考方案2】:

将数组作为Math.max() 函数的参数使用

Math.max.apply(null, arr);

var arr = [1, 2, 3];
var max = Math.max.apply(null, arr);
console.log('Max: '+ max);

【讨论】:

Math 以外的任何内容作为第一个参数传递给apply 将使Math.max 在与正常情况不同的上下文中运行。并不是说它在我尝试过的浏览器中不起作用,但如果实现需要默认的 Math 上下文,它可能会失败。 Math.max 实现不使用对象实例变量 - 没有理由这样做。函数实现只会遍历参数并找到最大值。根据official documentation,它是Math的静态方法 就像我说的那样,我不知道有任何实现会失败,只是这样的实现是可能的,尽管我想不出一个很好的理由来实现它方式。 但是你知道它是一个静态方法。 当然,但所有方法都有上下文,静态或实例。 console.log.apply(null, [1, 2, 3]) 在 Firefox 和 Chrome 控制台中会失败,但会在 Firebug 中工作。这一切都取决于实施。

以上是关于我应该在 Math.max(...arr) 中使用啥来代替 Chrome 的扩展运算符?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将math.max用于对象数组?

关于Math.max对array.join()处理返回NaN

ES6拓展运算符(...)用例

js不懂部分

js中Math.max()求取数组中最大值

js中apply和Math.max()函数的问题?