JavaScript高级程序设计第5章读书笔记(19)

Global对象的属性

Global对象包含一些特殊的属性,比如: 特殊值undefined、NaN、Infinity都是Global对象的属性。此外,所有原生引用类型的构造函数,像Object和Function,也都是Global对象的属性。以下列出了Global对象的所有属性。

属性 说明
undefined 特殊值undefined
NaN 特殊值NaN
Infinity 特殊值Infinity
Object 构造函数Object
Array 构造函数Array
Function 构造函数Function
Boolean 构造函数Boolean
String 构造函数String
Number 构造函数Number
Date 构造函数Date
RegExp 构造函数RegExp
Error 构造函数Error
EvalError 构造函数EvalError
RangeError 构造函数RangeError
ReferenceError 构造函数ReferenceError
SyntaxError 构造函数SyntaxError
TypeError 构造函数TypeError
URIError 构造函数URIError

ECMAScript 5明确禁止给undefined、NaN、Infinity赋值,这样做即使在非严格模式下也会报错。

window对象

ECMAScript虽然没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了window对象的属性。

本例,定义了全局变量color和全局函数sayColor()。在sayColor()内部可以通过window.color来访问color变量,说明全局变量是window对象的属性

JavaScript中的window对象扮演了ECMAScript规定的Global对象。

另一种取得Global对象的方法如下:

在没有给函数明确指定this值的情况下,this值等于Global对象。像这样通过简单地返回this来取得Global对象,在任何执行环境下都是可行的。

Math对象

与直接用JavaScript编写计算功能相比,Math对象提供的计算功能执行效率要高得多。

Math对象的属性

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

属性 说明
Math.E 自然对数的底数,即常量e的值
Math.LN10 10的自然对数
Math.LN2 2的自然对数
Math.LOG2E 以2为底e的对数
Math.LOG10E 以10为底e的对数
Math.PI π的值
Math.SQRT1_2 1/2的平方根(即2的平方根的倒数)
Math.SQRT2 2的平方根

min()和max()方法

min()和max()方法用于确定一组数值中的最小值和最大值。它们都可以接收任意多个数值参数,比如:

要找到数组中的最大或最小值,可以像下面这样使用apply()方法

这里的关键在于,把Math对象作为apply()方法的第一个参数,从而正确地设置this值。由于apply()方法的第二个参数是一个数组,接着,就可以将数组作为参数传入。

舍入方法

  • Math.ceil() 执行向上舍入,即它总是将数值向上舍入为最接近的整数
  • Math.floor() 执行向下舍入,即它总是将数值向下舍入为最接近的整数
  • Math.round() 执行标准舍入,即它总是将数值四舍五入为最接近的整数。与数学上的四舍五入规则相同

random()方法

Math.random()方法返回介于0和1之间的一个随机数,不包括0和1。套用以下公式,可以利用Math.random()从某个整数范围内随机选择一个值。

多数情况下,都可以通过一个函数计算可能值的总数和第一个可能的值,比如:

Math对象的其他方法

Math对象中还包括其他与计算相关的一些方法,如下表:

方法 说明
Math.abs(num) 返回num的绝对值
Math.exp(num) 返回Math.E的num次幂
Math.log(num) 返回num的自然对数
Math.pow(num, power) 返回num的power次幂
Math.sqrt(num) 返回num的平方根
Math.acos(x) 返回x的反余弦值
Math.asin(x) 返回x的反正弦值
Math.atan(x) 返回x的反正切值
Math.atan2(y, x) 返回y/x的反正切值
Math.cos(x) 返回x的余弦值
Math.sin(x) 返回x的正弦值
Math.tan(x) 返回x的正切值

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

本章小结

对象在JavaScript中被称为引用类型的值,而且有一些内置的引用类型可以用来创建特定的对象。

  • 引用类型与传统面向对象程序设计中的类型相似,但实现不同
  • Object是一个基础类型,其他所有类型都从Object继承了基本的行为
  • Array类型是一组值的有序列表,同时还提供了操作和转换这些值的功能
  • Date类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能
  • RegExp类型是ECMAScript支持正则表达式的一个接口,提供了最基本的和一些高级的正则表达式功能

函数,实际上是Function类型的实例,因此,函数也是对象。这一点是JavaScript最特别的地方。由于函数是对象,所以函数也拥有方法,可以用来增强其行为。

因为有了基本包装类型,所以JavaScript中的基本类型值可以被当作对象来访问。三种基本包装类型分别是: BooleanNumberString。它们的共同特征是:

  1. 每个包装类型都映射到同名的基本类型
  2. 在读取模式下访问基本类型值的时候,会创建对应的基本包装类型的一个对象,从而方便了数据操作。
  3. 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象。

在所有代码执行之前,作用域中就已经存在两个内置对象: GlobalMath。大多数ECMAScript实现中不能直接访问Global对象,不过,Web浏览器实现了承担该角色的window对象。全局变量和函数都是Global对象的属性。