《红宝书》 |单例内置对象 |Global和Math

单例内置对象:任何由ECMAScript实现提供、与宿主环境无关,并在ECMAScript程序开始执行时就存在的对象。即内置对象本身已经实例化好了。常见的内置对象有:ObjectArrayStringGlobalMath

Global

它是最特别的对象,因为代码不会显示地访问它。事实上,全局变量和全局函数都会变成Global的属性。isNaN()isFinite()parseInt()parseFloat()实际上都是Global的方法。

编码与解码

yBi2dJ.png

let url="https://www.wrox.com/illegal value.js#start"
encodeURI(url)          //https://www.wrox.com/illegal%20value.js#start
encodeURIComponent(url) //https%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start

eval()方法

它是一个完整的ECMAScript解释器,它接收一个参数,即要执行的ECMAScript字符串:

eval("console.log('hello')")    //hello

一般情况下,eval()执行的代码属于该调用所在上下文,被执行的代码与该上下文拥有相同的作用域链:

let msg="hello"
eval("console.log(msg)")    //hello
eval("function sayHi(){console.log('hi')}")
sayHi() //hi
eval("let msg="hello")
console.log(msg)    //hello

在严格模式下,执行eval()相当于创建了一个新的上下文。这种情况下,外部无法访问内部,但内部可以访问外部。

Global对象属性

yBAaIH.png

window对象

虽然无法直接访问Global,但浏览器将window对象作为Glocal对象的代理。因此所有全局作用域中声明的变量和函数都成了window的属性。

获取Global对象

当一个函数没有明确指定this的情况下执行时,this值等于Global对象。

let global=function(){
    return this
}();

Math

ECMAScript提供了Math对象作为保存数学公式、信息和计算的地方。

Math属性

这些属性主要用于保存数学中的一些特殊值:
yBuDAK.png

Math方法

yBuMmq.png
取最大最小值

Math.min(1,2,3,4,5) //1
Math.max(1,2,3,4,5) //5
//对于数组可以使用扩展操作符
let arr=[1,2,3,4,5]
Math.max(...arr)    //5

舍入

let num=1.5
Math.ceil(num)  //2
Math.floor(num) //1
Math.round(num) //2

随机数

Math.random()   //0.932879007220689
//取1~10
Math.floor(Math.random()*10+1)
//取2~9:*后面表示总数有多少,+后面表示最小取多少
Math.floor(Math.random()*9+2)
posted @ 2021-02-11 12:43  sanhuamao  阅读(200)  评论(0编辑  收藏  举报