js中apply和Math.max()函数的问题及区别介绍


Posted in Javascript onMarch 27, 2018

下面给大家介绍js中apply和Math.max()函数的问题,具体内容如下所示:

var arr=[1,3,6,3,7,9,2];
console.log(Math.max.apply(null,arr));

一直搞不懂为什么这样可以算出一个数组的最大值?一直想不明白,请js高手指教一下。

答案1

Function.apply()是JS的一个OOP特性,一般用来模拟继承和扩展this的用途,对于上面这段代码,可以这样去理解:

XXX.apply是一个调用函数的方法,其参数为:apply(Function, Args),

Function为要调用的方法,Args是参数列表,当Function为null时,默认为上文,

Math.max.apply(null, arr)

可认为是

apply(Math.max, arr)

然后,arr是一个参数列表,对于max方法,其参数是若干个数,即

Math.max(a, b, c, d, ...)

当使用apply时,把所有参数加入到一个数组中,即

arr = [a, b, c, d, ...]

代入到原式,

Math.max.apply(null, [a, b, c, d, ...])

实际上等同于

Math.max(a, b, c, d, ...)

在此处,使用apply的优点是在部分JS引擎中提升性能。

答案2

Math.max()方法,支持传递多个参数,比如:Math.max(1,4,2,3,7,5,6)

但是它不支持直接传递一个数组作为参数,比如:Math.max(new Array(1,4,2,3,7,5,6))

这里,只要我们有方法把数组,一个一个拆分开来,传递到Math.max()方法中,就实现了传递数组的方法。

所有函数都有apply(作用域链,参数)这个方法,这个函数的“参数”,接收一个数组,并且是将数组中的每个值,分开来,传递给调

补充:

Javascript中Math.max.apply和Math.max的区别

Javascript中的Math.max方法可以求出给定参数中最大的数。

> Math.max('1','2','3.1','3.2')
< 3.2
> Math.min(1,0,-1)
< -1

但如果是数组,就不能这样调用了。

此时就用到了apply方法:

apply 方法 (Function) (JavaScript)
调用函数,并用指定对象替换函数的 this 值,同时用指定数组替换函数的参数。
apply([thisObj[,argArray]])
thisObj
可选。 要用作 this 对象的对象。
argArray

可选。 要传递到函数的一组参数。
巧妙地使数组也可以调用Math.max和Math.min。

> Math.max.apply(null, ['1','2','3.1','3.2'])
< 3.2
> Math.min.apply(null, [1,0,-1])
< -1

总结

以上所述是小编给大家介绍的js中apply和Math.max()函数的问题及区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
一个无限级XML绑定跨框架菜单(For IE)
Jan 27 Javascript
半角全角相互转换的js函数
Oct 16 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
Mar 28 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
Aug 21 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
Nov 03 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
Nov 26 Javascript
JS中如何实现Laravel的route函数详解
Feb 12 Javascript
jQuery实用密码强度检测
Mar 02 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
Dec 14 Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 Javascript
laypage.js分页插件使用方法详解
Jul 27 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
Nov 05 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 #Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 #Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 #Javascript
Angularjs实现控制器之间通信方式实例总结
Mar 27 #Javascript
Angular中使用better-scroll插件的方法
Mar 27 #Javascript
使用node打造自己的命令行工具方法教程
Mar 26 #Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 #Javascript
You might like
人族 TERRAN 概述
2020/03/14 星际争霸
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
angularJS 入门基础
2015/02/09 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
详解Python IO口多路复用
2020/06/17 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
中国最大的团购网站:聚划算
2016/09/21 全球购物
媒体宣传策划方案
2014/05/25 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
悬空寺导游词
2015/02/05 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
销售开票员岗位职责
2015/04/15 职场文书
电影开国大典观后感
2015/06/04 职场文书