前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Math.max()方法获取数组中的最大值返回NaN问题分析

Math.max()方法获取数组中的最大值返回NaN问题分析

作者头像
德顺
发布2021-12-08 16:30:23
3.9K0
发布2021-12-08 16:30:23
举报
文章被收录于专栏:前端资源前端资源

今天群里边有人问到 Math.max() 方法返回 NaN 的问题,我简单举个例子,看下图:

看上去没什么问题,但为什么返回 NaN 呢?我们先简单看一下  Math.max() 方法:

Math.max()

Math.max() 函数返回一组数中的最大值。

Demo:

代码语言:javascript
复制
console.log(Math.max(1, 3, 2));
// expected output: 3

console.log(Math.max(-1, -3, -2));
// expected output: -1

const array1 = [1, 3, 2];

console.log(Math.max(...array1));
// expected output: 3

语法:

代码语言:javascript
复制
Math.max(value1[,value2, ...])

参数:一组数值

代码语言:javascript
复制
value1, value2, ...

返回值:

返回给定的一组数字中的最大值。

注意:如果给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN

问题解决

仔细观察可以发现,代码中使用了 ... 解构,这没问题,ES6 语法是支持这样了,会把数组解构成一组值。

但这里的问题是 array 是一个二维数组,解构完还是一个数组,而非数字,所以返回 NaN 了。

除此之外,还会有一些场景会出现 NaN ,简单举例:

代码语言:javascript
复制
var arr=[1,2,3,45,66]
var num =Math.max(arr.join(','))
alert(num)

如果这样写,用 arr.join(',') 得到的是字符串,就相当于一个字符串了:

代码语言:javascript
复制
Math.max( '1,2,3,45,66' );

解决方法:

代码语言:javascript
复制
var arr = [1,2,3,45,66]
var num = Math.max.apply( null, arr );
console.log( num );

apply 的第二个参数是参数数组。

或者:

代码语言:javascript
复制
var arr = [1,2,3,45,66]
var num = eval( 'Math.max(' + arr.join( ',' ) + ')' );
console.log( num ); // 66

如果坚持要用字符串拼接参数,可以用 eval 方法。

未经允许不得转载:w3h5 » Math.max()方法获取数组中的最大值返回NaN问题分析

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Math.max()
  • 问题解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档