本文介绍JavaScript中的内置对象Math,以及Math的常用方法。

一、Math简单介绍

ECMAScript为我们提供了一个专门处理数学计算的内置对象——Math对象。Math对象提供了很多数学专业计算中可能会用到的特殊值(譬如 π )常量,以及封装好的工具函数(譬如 求N个数最大值、最小值、随机数、绝对值、平方根以及正玄和反余值等)。

这里先通过console.dir()方法打印Math对象的所有成员,我们可以通过下面列出的打印信息对Math对象有一个简单的了解。

console.dir(Math);
Math
E: 2.718281828459045 //自然对数的底数,常量e的值
LN2: 0.6931471805599453 //2的自然对数
LN10: 2.302585092994046 //10的自然对数
LOG2E: 1.4426950408889634 //以2为底e的对数
LOG10E: 0.4342944819032518 //以10为底e的对数
PI: 3.141592653589793 //π的值
SQRT1_2: 0.7071067811865476 //1/2的平方根(2的平方根的倒数)
SQRT2: 1.4142135623730951 //2的平方根
abs: ƒ abs() //求参数的绝对值
acos: ƒ acos() //返回参数的反余弦值
acosh: ƒ acosh()
asin: ƒ asin() //返回参数的反正玄值
asinh: ƒ asinh()
atan: ƒ atan() //返回参数的反正切值
atan2: ƒ atan2() //Math.atan2(y,x) 返回y/x的反正切值
atanh: ƒ atanh()
cbrt: ƒ cbrt()
ceil: ƒ ceil() //执行向上舍入(将数值向上舍入为最接近的整数)
clz32: ƒ clz32()
cos: ƒ cos() //返回参数余弦值
cosh: ƒ cosh()
exp: ƒ exp() //返回Math.E的参数次幂
expm1: ƒ expm1()
floor: ƒ floor() //执行向下舍入(将数值向下舍入为最接近的整数)
fround: ƒ fround()
hypot: ƒ hypot()
imul: ƒ imul()
log: ƒ log() //返回参数的自然对数
log1p: ƒ log1p()
log2: ƒ log2()
log10: ƒ log10()
max: ƒ max() //返回参数列表中的最大值
min: ƒ min() //返回参数列表中的最小值
pow: ƒ pow() //Math.pow(n,p) 返回n的p次幂
random: ƒ random() //返回0~1之间的随机数
round: ƒ round() //执行标准的舍入(数学意义的舍入规则)
sign: ƒ sign()
sin: ƒ sin() //返回参数的正弦值
sinh: ƒ sinh()
sqrt: ƒ sqrt() //返回参数的平方根
tan: ƒ tan() //返回参数的正切值
tanh: ƒ tanh()
trunc: ƒ trunc()
Symbol(Symbol.toStringTag): "Math"
__proto__: Object

二、Math常用方法

Math.abs()方法返回参数值的绝对值。

  console.log(Math.abs(16));              //16
console.log(Math.abs(-6)); //6

Math.max()方法返回参数之中最大的那个值,Math.min()返回参数列表中最小的那个值。如果参数为空, Math.min返回Infinity, Math.max返回-Infinity。

  /*01-求参数列表的最大值和最小值*/
console.log(Math.max(2, -1, 5, 18)); // 18
console.log(Math.min(2, -1, 5, 21)); // -1 /*02-测试参数列表为空的情况*/
console.log(Math.min()); // Infinity
console.log(Math.max()); // -Infinity

Math.pow(x,y)方法返回以第一个参数为底数、第二个参数为幂的指数值,即求x的y次幂。

console.log(Math.pow(2,3));   //8     2的3次幂
console.log(Math.pow(2,-1)); //0.5 2的-1次幂 /*计算 圆的面积 = πr的平方*/
var radius = 20;
var area = Math.PI * Math.pow(radius, 2);

Math.round方法用于执行四舍五入操作。

Math.ceil()方法用于返回大于参数值的最小整数(天花板值)。

Math.floor()方法用于返回大于参数值的最大整数(地板值)。

  /*01-Math.round() 执行正常的四舍五入操作*/
console.log(Math.round(0.1)); // 0
console.log(Math.round(0.5)); // 1
console.log(Math.round(0.6)); // 1
/*负值的处理*/
console.log(Math.round(-1.1)); // -1
console.log(Math.round(-1.5)); // -1 注意特殊情况
console.log(Math.round(-1.7)); // -2 /*02-Math.ceil() 大于参数值的最小整数*/
console.log(Math.ceil(3.1)); // 4
console.log(Math.ceil(3.5)); // 4
console.log(Math.ceil(3.9)); // 4
console.log(Math.ceil(-3.1)); //-3
console.log(Math.ceil(-3.5)); //-3
console.log(Math.ceil(-3.9)); //-3 /*03-Math.floor() 小于参数值的最大整数*/
console.log(Math.floor(3.1)); // 3
console.log(Math.floor(3.5)); // 3
console.log(Math.floor(3.9)); // 3
console.log(Math.floor(-3.1)); //-4
console.log(Math.floor(-3.5)); //-4
console.log(Math.floor(-3.9)); //-4

Math.sqrt()方法返回参数值的平方根,如果参数是一个负值,则返回NaN。

console.log(Math.sqrt(4));          //2
console.log(Math.sqrt(-4)); //NaN
console.log(Math.sqrt(9)); //3

Math.random()方法返回0到1之间的一个伪随机数,取值区间为[ 0 , 1 )

console.log(Math.random());   //0.6260459147033315
console.log(Math.random()); //0.5273094529873636 /*封装两个生成随机数的方法*/
function getRandom(min, max) {
return Math.random() * (max - min) + min;
} function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
} getRandom(1, 8) // 6.919178146646834
getRandomInt(1, 8) // 5
/*如果需要对结果取整,那么使用Math.floor或者是parseInt函数处理*/

Math对象除了上述工具函数外,还提供一系列的三角函数方法。

    //Math.sin():返回参数的正弦      (参数为弧度值)
//Math.cos():返回参数的余弦 (参数为弧度值)
//Math.tan():返回参数的正切 (参数为弧度值)
//Math.asin():返回参数的反正弦 (返回值为弧度值)
//Math.acos():返回参数的反余弦 (返回值为弧度值)
//Math.atan():返回参数的反正切 (返回值为弧度值) console.log(Math.sin(0)); // 0
console.log(Math.cos(0)); // 1
console.log(Math.tan(0)); // 0
console.log(Math.sin(Math.PI / 2)); // 1

前端开发系列009-基础篇之JavaScript内置Math的更多相关文章

  1. 前端开发【第5篇:JavaScript进阶】

    语句 复合表达式和空语句 复合表达式意思是把多条表达式连接在一起形成一个表达式 { let a = 100; let b = 200; let c = a + b; } 注意这里不能再块级后面加分号, ...

  2. 前端开发【第4篇:JavaScript基础】

    JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...

  3. 前端开发【第3篇:JavaScript序】

    JavaScript历史 聊聊JavaScript的诞生 JavaScirpt鼻祖:Bremdan Eich(布兰登·艾奇),JavaScript的诞生于浏览器的鼻祖网景公司(Netscape),发布 ...

  4. 前端开发【第6篇:JavaScript客户端(浏览器)】

    Web浏览器中的JavaScript 客户端JavaScript时间线 1.Web浏览器创建Document对象,并且开始解析web页面,解析HTML元素和它门的文本内容后添加Element对象和Te ...

  5. 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)

    背景 ​ 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...

  6. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  7. ESP8266开发之旅 基础篇① 走进ESP8266的世界

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  9. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  10. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

随机推荐

  1. Nginx+Windows搭建域名访问环境, 由nginx --> 网关 ---> 服务

    1).修改windows hosts文件改变本地域名映射,将gulimall.com映射到虚拟机ip 2).修改nginx的根配置文件nginx.conf,将upstream映射到我们的网关服务 up ...

  2. HL7消息编辑器的使用手册

    REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件: Redis Assistant ZooKeeper Assistant Kafka Assistant RocketMQ Ass ...

  3. 🧠 Model Context Protocol(MCP)详解:AI 编程新时代的“USB 接口

    目标读者:具备一定编程基础,但尚未涉足 AI 编程的开发者 本文目的:帮助你理解 MCP 的核心概念.技术优势.运作机制,并指导你如何使用 MCP 构建智能体项目. 什么是 MCP? MCP,全称 M ...

  4. Android编译时动态插入代码原理与实践

    本文同步发布于公众号:移动开发那些事:Android编译时动态插入代码原理与实践 Android开发中,编译时动态插入代码是一种高效,并且对业务逻辑是低侵入性的方案,常用于增加通用的埋点能力,或者插入 ...

  5. nodejs判断文件的字符集编码

    ----------------------------------- 通过前2字节判断: 编码 16进制数 unicode FF FE  或 FE FF utf-8 EF BB 代码: var fs ...

  6. 前端传字符串,需要转List对象

    前端传字符串,需要转List对象 import com.alibaba.fastjson.JSONObject; List<LogySbjsJdsbqxxxAccount> param = ...

  7. [flask]自定义请求日志

    前言 flask默认会在控制台输出非结构化的请求日志,如果要输出json格式的日志,并且要把请求日志写到单独的文件中,可以通过先禁用默认请求日志,然后在钩子函数中自行记录请求的方式来实现. 定义日志器 ...

  8. python-docx 设置表格边框

    # -*- coding: utf-8 -*- """ Created on Sat Oct 24 17:21:31 2020 pip install -i https: ...

  9. SpringBoot项目创建的三种方式

    目录 1 通过官网创建 2 通过IDEA脚手架创建 2.1 IDEA新建项目 2.2 起Group名字,选择Java版本,点击Next 2.3 选择Web依赖,选择Spring Web,确认Sprin ...

  10. Axure RP医疗在线挂号问诊原型图医院APP原形模板

    Axure RP医疗在线挂号问诊原型图医院APP原形模板 医疗在线挂号问诊Axure RP原型图医院APP原形模板,是一款原创的医疗类APP,设计尺寸采用iPhone13(375*812px),原型图 ...