Math对象--确定最大最小值

悠悠 2022-12-26 08:24 243阅读 0赞

Math 对象 存在两个方法来确定最大最小值,分别是 max 和 min ,但是这两个方法,接收的参数,只能是 逗号分隔 的数字,或者是 数字字符串,数字字符串在比较的时候,会自动转为 数字

类似下面这样

  1. let max1 = Math.max("1", "2", "3");
  2. console.log(max1); // 3
  3. let max1 = Math.max(1, 2, 3);
  4. console.log(max1); // 3

但是如果需要处理的是一个数组,那又该怎么办,如果直接把数组传递进去的话,结果会是神马呢?

  1. let max1 = Math.max(["1", "2", "3"]);
  2. console.log(max1); // NaN
  3. let max2 = Math.max([1, 2, 3]);
  4. console.log(max2); // NaN

没错,结果是NaN ,是一个非数字,那就代表其实 max 这个方法 是不认识传进来的数组的,那我们要想取到这个数组内部的最大最小值得话,最原始的方法,其实是把数组内部的元素全部取出来,然后放到 max 内部,但是,这就存在一个问题了,怎么遍历取出来呢? 传递的参数,不能是一个 大字符串,只能是一个个 用 逗号 分隔的数字 或者字符串类型的数字,那这个其实就不好做了,或者说我暂时没想到好的方法。

但是js内部其实是存在 方法的,那就是 通过 apply 方法,apply 方法 接收两个参数,第一个是this指向,第二个是一个数组,那我们可以这样来做

  1. let max1 = Math.max.apply(Math, ["1", "2", "3"]);
  2. console.log(max1); // 3
  3. let max2 = Math.max.apply(Math, [1, 2, 3]);
  4. console.log(max2); // 3

没错,第一项 传递的是 Math 对象,因为 其实归根结底调用的 还是 Math 对象下的方法,如果不传 Math 对象的话,结果就是这样的了

  1. let max1 = Math.max.apply(["1", "2", "3"]);
  2. console.log(max1); // -Infinity
  3. let max2 = Math.max.apply([1, 2, 3]);
  4. console.log(max2); // -Infinity

负的无限大,emmmm,至于为啥是负的无限大,我也挺好奇的,暂时还没反应过来,后面找到答案了,再来补充一下。

发表评论

表情:
评论列表 (有 0 条评论,243人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Math对象--确定

    Math 对象 存在两个方法来确定最大最小值,分别是 max 和 min ,但是这两个方法,接收的参数,只能是 逗号分隔 的数字,或者是  数字字符串,数字字符串在比较的时候,