5.7 Global对象
- 简介
- URI编码方法
- URI解码方法
- eval()方法
- Math对象
简介
Global(全局)对象可以说是ECMAScript中最特别的一个对象了,不属于任何其他对象的属性和方法,都是它的属性和方法。例如:isNaN()、parseInt()、parseFloat()、String()、Number()、encodeURI和encodeURTComponent()等等,我们会发现这些方法都不是调用某个对象的方法,而是直接写的。比如:
parseInt('5432542')
String(4352523)
URI编码方法
Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,其中,enCodeURI()主要用于整个URI,而encodeURIComponent()主要用于对URI中的某一段进行编码。它们的主要区别在于,前者不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而后者则会对它发现的任何非标准字符进行编码。
var uri = 'http://www.wrox.com/illegal value.htm#start'
console.log(enCodeURI(uri))
'http://www.wrox.com/illegal%20value.htm#start'
console.log(enCodeURIComponent(uri))
'http%3A%2F%2Fwww.wrox.com%2Fillgal%20value.htm%23start'
我们发现用enCodeURI()编码后除了空格之外都没有变,而使用enCodeURIComponent()方法则会使用对应的编码替换素有非字母数字字符。所以对整个URI编码使用enCodeURI(),而对URI后面的参数使用enCodeURIComponent()进行编码,如果对整个uri编码也用enCodeURIComponent()这个方法就会无法显示正常的uri。
URI解码方法
与enCodeURI()和enCodeURIComponent()方法对应的两个解码方法分别是decodeURI()和decodeURIComponent()。decodeURI()只能对enCodeURI()进行解码,decodeURIComponent()只能对enCodeURIComponent()进行解码。
eval()方法
eval()方法就像是一个完整的ECMAScript解析器,它只接收一个参数,即要执行的js字符串。例:
eval('console.log('hi')')
等价于
console.log('hi')
通过eval()执行的代码被认为是包含本次调用的执行环境的一部分,所以被执行的代码具有与该执行环境相同的作用域链。这意味着通过eval()执行的代码可以引用在包含环境中定义的变量,例:
var msg = 'hello world'
eval('console.log(msg)') // hello world
上述代码中eval的msg可以直接引用上面的值,所以这两行代码的作用域是一样的。下面的情况也是可以,不过在严格模式下会报错:
eval('var msg = 'hello world'')
console.log(msg) // hello world
在eval()中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字符串中;它们只有在eval()执行的时候创建。
在严格模式下,在外部访问不到eval()中创建的任何变量和函数,因此上面的例子会报错。
eval()的参数必须是字符串,解析的时候会变成脚本,能够解析字符串的能力非常强大,强大在于如果代码是字符串的情况下就可以使用eval()这个方法,但也非常危险。因为eval()方法的作用域跟上下文是一样的,如果eval()中的参数里有input的值,我在input中就可以输入一些代码获取到用户的一些信息,威胁到用户安全,也就是所谓的代码注入。
Math对象
min()和max()方法
min()和max()方法用于确定一组数值中的最小值和最大值。这两个方法可以接收任意多个数值参数,例:
var max = Math.max(3, 54, 32, 16)
console.log(max) // 54
var min = Math.min(3, 54, 32, 16)
console.log(min) // 3
要找到数值中的最大或最小值,可以像下面这样使用apply()方法。
var values = [1, 2, 3, 4, 5, 6, 7, 8]
var max = Math.max.apply(Math, values)
舍入方法
(1)Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
(2)Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
(2)Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数;
例:
console.log(Math.ceil(25.5)) // 26
console.log(Math.floor(25.5)) // 25
console.log(Math.round(25.5)) // 26
random()方法
Math.random()方法返回大于等于0小于1的一个随机数。
如果你想选择一个1到10之间的数值,可以这么写
var num = Math.floor(Math.random()*10+1)