单例内置对象
单例内置对象全局只有一个实例,运行程序时会自动生成,无须单独实例化就可以直接使用。
globalThis对象
globalThis 对象是 ECMAScript 的顶层对象,它提供了全局环境,但代码不会显式访问该对象。所有不属于任何对象的内置属性和方法都是 globalThis 对象的属性和方法。前面介绍了 parseInt()、parseFloat()、setTimeout() 和 setInterval () 等函数。实际上,它们都是 globalThis 对象的方法。除此之外,globalThis 对象还有其他属性和方法。
早期的 ECMAScript 并不存在统一的 globalThis 对象,不同的环境拥有不同的顶层对象。在浏览器中,顶层对象是 window,而 Node.js 诞生后,由于 Node.js 位于服务器端,并不存在于窗口中,因此顶层对象是 global,这使得一套代码无法同时在浏览器和 Node.js 环境中运行。
为了解决这个问题,ECMAScript 6 引入了 globalThis 对象,从此无论是在浏览器中还是在 Node.js 中它都是顶层对象。但是,从原理上来说,浏览器中的 globalThis 对象指向 window 对象,而 Node.js 中的 globalThis 对象指向 global 对象,如果在浏览器和 Node.js 中分别执行以下代码,输出结果都将为 true。
console.log(globalThis===window); //在浏览器中执行此行代码,输出true
console.log(globalThis===global); //在Node.js中执行此行代码,输出true
由于 globalThis 对象是全局对象,所有不属于任何对象的内置属性和方法都是 globalThis 对象的属性和方法,其数量众多,因此这里不一一介绍。以下只列举一些前面使用过的属性或方法,可以看出它们本质上都是 globalThis 对象的属性和方法。
console.log(globalThis.NaN); //输出NaN
console.log(globalThis.undefined); //输出NaNundefined
console.log(globalThis.parseInt("1")); //输出1
console.log(globalThis.parseFloat("1.2")); //输出1.2
console.log(globalThis.Number("3.3")); //输出3.3
console.log(globalThis.String(true)); //输出"true"
console.log(new globalThis.Date()); //输出2022-11-28T14:19:59
console.log(new globalThis.RegExp("hello")); //输出/hello/
console.log(new globalThis.Array(1, 2, 3)); //输出[1,2,3]
globalThis.setTimeout(function () {
console.log("setTimeout!"); //输出"setTimeout!"
}, 0);
let interval = globalThis.setInterval(function () {
console.log("setInterval!"); //输出"setInterval!"
globalThis.clearInterval(interval);
}, 0);
globalThis.Promise
.resolve("Promise!") //输出"Promise!"
.then(p => console.log(p));
下面将介绍 Math 和 console 对象,它们实际上也是 globalThis 对象的属性,示例代码如下。
//以下代码输出3.141592653589793
globalThis.console.log(globalThis.Math.PI);
Math对象
Math 对象提供了用于数学计算的属性和方法。
Math 对象的属性如表16-6所示,它们主要用于保存数学中的一些特定值。

Match 对象的方法如表16-7所示,它们主要用于数学计算,以求出特定值。




Math 对象的方法众多,就不一一列举示例代码了。下面只列举几个常用方法的示例代码。
console.log(Math.abs(-5)); //输出5,-5的绝对值为5
console.log(Math.pow(2,3)); //输出8,2的3次方为8
console.log(Math.sqrt(25)); //输出5,25的平方根为5
console.log(Math.max(1,5,9,2,6)); //输出9,最大数为9
console.log(Math.round(3.4)); //输出3,3.4舍入后为3
//生成minNum~maxNum的随机数
function randomNum(minNum, maxNum) {
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum);
}
console.log(randomNum(1,100)); //生成1~100的随机数