JavaScript高级程序设计之引用类型之单体内置对象之Math对象第5.7.2讲笔记

ECMAScript 还为保存数学公式和信息提供了一个公共位置,即Math 对象。与我们在JavaScript 直
接编写的计算功能相比,Math 对象提供的计算功能执行起来要快得多。Math 对象中还提供了辅助完成
这些计算的属性和方法。
1. Math 对象的属性

Math 对象包含的属性大都是数学计算中可能会用到的一些特殊值。下表列出了这些属性。

虽然讨论这些值的含义和用途超出了本书范围,但你确实可以随时使用它们。
2. min()和max()方法
Math 对象还包含许多方法,用于辅助完成简单和复杂的数学计算。
其中,min()和max()方法用于确定一组数值中的最小值和最大值。这两个方法都可以接收任意多
个数值参数,如下面的例子所示。

var max = Math.max(3, 54, 32, 16);
alert(max); //54
var min = Math.min(3, 54, 32, 16);
alert(min); //3

对于3、54、32 和16,Math.max()返回54,而Math.min()返回3。这两个方法经常用于避免多
余的循环和在if 语句中确定一组数的最大值。
要找到数组中的最大或最小值,可以像下面这样使用apply()方法。
var values = [1, 2, 3, 4, 5, 6, 7, 8];
var max = Math.max.apply(Math, values);
这个技巧的关键是把Math 对象作为apply()的第一个参数,从而正确地设置this 值。然后,可
以将任何数组作为第二个参数。

3. 舍入方法
下面来介绍将小数值舍入为整数的几个方法:Math.ceil()、Math.floor()和Math.round()。
这三个方法分别遵循下列舍入规则:
 Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
 Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
 Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课
上学到的舍入规则)。
下面是使用这些方法的示例:
alert(Math.ceil(25.9)); //26
alert(Math.ceil(25.5)); //26
alert(Math.ceil(25.1)); //26
alert(Math.round(25.9)); //26
alert(Math.round(25.5)); //26
alert(Math.round(25.1)); //25
alert(Math.floor(25.9)); //25
alert(Math.floor(25.5)); //25
alert(Math.floor(25.1)); //25

对于所有介于25 和26(不包括26)之间的数值,Math.ceil()始终返回26,因为它执行的是向
上舍入。Math.round()方法只在数值大于等于25.5 时返回26;否则返回25。最后,Math.floor()
对所有介于25 和26(不包括26)之间的数值都返回25。
4. random()方法
Math.random()方法返回大于等于0 小于1 的一个随机数。对于某些站点来说,这个方法非常实用,
因为可以利用它来随机显示一些名人名言和新闻事件。套用下面的公式,就可以利用Math.random()
从某个整数范围内随机选择一个值。
值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)

公式中用到了Math.floor()方法,这是因为Math.random()总返回一个小数值。而用这个小数
值乘以一个整数,然后再加上一个整数,最终结果仍然还是一个小数。举例来说,如果你想选择一个1
到10 之间的数值,可以像下面这样编写代码:
var num = Math.floor(Math.random() * 10 + 1);

总共有10 个可能的值(1 到10),而第一个可能的值是1。而如果想要选择一个介于2 到10 之间的
值,就应该将上面的代码改成这样:
var num = Math.floor(Math.random() * 9 + 2);

从2 数到10 要数9 个数,因此可能值的总数就是9,而第一个可能的值就是2。多数情况下,其实
都可以通过一个函数来计算可能值的总数和第一个可能的值,例如:
function selectFrom(lowerValue, upperValue) {
var choices = upperValue - lowerValue + 1;
return Math.floor(Math.random() * choices + lowerValue);
}
var num = selectFrom(2, 10);
alert(num); // 介于2 和10 之间(包括2 和10)的一个数值

函数selectFrom()接受两个参数:应该返回的最小值和最大值。而用最大值减最小值再加1 得到
了可能值的总数,然后它又把这些数值套用到了前面的公式中。这样,通过调用selectFrom(2,10)
就可以得到一个介于2 和10 之间(包括2 和10)的数值了。利用这个函数,可以方便地从数组中随机
取出一项,例如:
var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
var color = colors[selectFrom(0, colors.length-1)];
alert(color); // 可能是数组中包含的任何一个字符串

在这个例子中,传递给selectFrom()的第二个参数是数组的长度减1,也就是数组中最后一项的位置。
5. 其他方法
Math 对象中还包含其他一些与完成各种简单或复杂计算有关的方法,但详细讨论其中每一个方法
的细节及适用情形超出了本书的范围。下面我们就给出一个表格,其中列出了这些没有介绍到的Math
对象的方法。


虽然 ECMA-262 规定了这些方法,但不同实现可能会对这些方法采用不同的算法。毕竟,计算某个
值的正弦、余弦和正切的方式多种多样。也正因为如此,这些方法在不同的实现中可能会有不同的精度。

5.8 小结
对象在 JavaScript 中被称为引用类型的值,而且有一些内置的引用类型可以用来创建特定的对象,
现简要总结如下:
 引用类型与传统面向对象程序设计中的类相似,但实现不同;
 Object 是一个基础类型,其他所有类型都从Object 继承了基本的行为;
 Array 类型是一组值的有序列表,同时还提供了操作和转换这些值的功能;
 Date 类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能;
 RegExp 类型是ECMAScript 支持正则表达式的一个接口,提供了最基本的和一些高级的正则表
达式功能。
函数实际上是Function 类型的实例,因此函数也是对象;而这一点正是JavaScript 最有特色的地
方。由于函数是对象,所以函数也拥有方法,可以用来增强其行为。
因为有了基本包装类型,所以JavaScript 中的基本类型值可以被当作对象来访问。三种基本包装类
型分别是:Boolean、Number 和String。以下是它们共同的特征:
 每个包装类型都映射到同名的基本类型;
 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据
操作;
 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象。
在所有代码执行之前,作用域中就已经存在两个内置对象:Global 和Math。在大多数ECMAScript
实现中都不能直接访问Global 对象;不过,Web 浏览器实现了承担该角色的window 对象。全局变
量和函数都是Global 对象的属性。Math 对象提供了很多属性和方法,用于辅助完成复杂的数学计算
任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值