Math 对象 存在两个方法来确定最大最小值,分别是 max 和 min ,但是这两个方法,接收的参数,只能是 逗号分隔 的数字,或者是 数字字符串,数字字符串在比较的时候,会自动转为 数字
类似下面这样
let max1 = Math.max("1", "2", "3");
console.log(max1); // 3
let max1 = Math.max(1, 2, 3);
console.log(max1); // 3
但是如果需要处理的是一个数组,那又该怎么办,如果直接把数组传递进去的话,结果会是神马呢?
let max1 = Math.max(["1", "2", "3"]);
console.log(max1); // NaN
let max2 = Math.max([1, 2, 3]);
console.log(max2); // NaN
没错,结果是NaN ,是一个非数字,那就代表其实 max 这个方法 是不认识传进来的数组的,那我们要想取到这个数组内部的最大最小值得话,最原始的方法,其实是把数组内部的元素全部取出来,然后放到 max 内部,但是,这就存在一个问题了,怎么遍历取出来呢? 传递的参数,不能是一个 大字符串,只能是一个个 用 逗号 分隔的数字 或者字符串类型的数字,那这个其实就不好做了,或者说我暂时没想到好的方法。
但是js内部其实是存在 方法的,那就是 通过 apply 方法,apply 方法 接收两个参数,第一个是this指向,第二个是一个数组,那我们可以这样来做
let max1 = Math.max.apply(Math, ["1", "2", "3"]);
console.log(max1); // 3
let max2 = Math.max.apply(Math, [1, 2, 3]);
console.log(max2); // 3
没错,第一项 传递的是 Math 对象,因为 其实归根结底调用的 还是 Math 对象下的方法,如果不传 Math 对象的话,结果就是这样的了
let max1 = Math.max.apply(["1", "2", "3"]);
console.log(max1); // -Infinity
let max2 = Math.max.apply([1, 2, 3]);
console.log(max2); // -Infinity
负的无限大,emmmm,至于为啥是负的无限大,我也挺好奇的,暂时还没反应过来,后面找到答案了,再来补充一下。