Global对象
- 不属于任何其他对象的属性和方法,最终都是Global对象的属性和方法
- 所有在全局作用域中定义的属性和函数,都是Global 对象的属性
- 诸如isNaN()、isFinite()、parseInt()以及parseFloat(),实际上全都是Global对象的方法
1、URI 编码方法
- Global 对象的encodeURI()和encodeURIComponent()方法可以对URI(Uniform Resource Identifiers,通用资源标识符)进行编码,以便发送给浏览器。
- 有效的URI 中不能包含某些字符,例如空格。而这两个URI 编码方法就可以对URI进行编码,它们用特殊的UTF-8 编码替换所有无效的字符,从而让浏览器能够接受和理解。
- encodeURI()主要用于整个URI,不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号。
- encodeURIComponent()主要用于对URI中的某一段,会对它发现的任何非标准字符进行编码
var uri = "http://www.wrox.com/illegal value.htm#start";
//"http://www.wrox.com/illegal%20value.htm#start"
alert(encodeURI(uri));
//"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));
- 与encodeURI()和encodeURIComponent()方法对应的两个方法分别是decodeURI()和
decodeURIComponent()。 - decodeURI()只能对使用encodeURI()替换的字符进行解码
- decodeURIComponent()能够解码使用encodeURIComponent()编码的所有字符,即它可以解码任何特殊字符的编码
var uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start";
//http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start
alert(decodeURI(uri));
//http://www.wrox.com/illegal value.htm#start
alert(decodeURIComponent(uri));
2、eval()方法
- eval()方法就像是一个完整的ECMAScript解析器,它只接受一个参数,即要执行的ECMAScript (或JavaScript)字符串
- 当解析器发现代码中调用eval()方法时,它会将传入的参数当作实际的ECMAScript 语句来解析,然后把执行结果插入到原位置。
- 通过eval()执行的代码被认为是包含该次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链
var msg = "hello world";
eval("alert(msg)"); //"hello world"
eval("function sayHi() { alert('hi'); }");
sayHi();//"hi"
eval("var msg = 'hello world'; ");
alert(msg); //"hello world"
- 严格模式下,在外部访问不到eval()中创建的任何变量或函数,因此前面两个例子都会导致错误。同样,在严格模式下,为eval 赋值也会导致错误:
"use strict";
eval = "hi"; //causes error
3、Global对象的属性
属性 | 说明 | 属性 | 说明 |
---|---|---|---|
undefined | 特殊值undefined | Date | 构造函数Date |
NaN | 特殊值NaN | RegExp | 构造函数RegExp |
Infinity | 特殊值Infinity | Error | 构造函数Error |
Object | 构造函数Object | EvalError | 构造函数EvalError |
Array | 构造函数Array | RangeError | 构造函数RangeError |
Function | 构造函数Function | ReferenceError | 构造函数ReferenceError |
Boolean | 构造函数Boolean | SyntaxError | 构造函数SyntaxError |
String | 构造函数String | TypeError | 构造函数TypeError |
Number | 构造函数Number | URIError | 构造函数URIError |
- ECMAScript 5 明确禁止给undefined、NaN和Infinity赋值,这样做即使在非严格模式下也会导致错误。
4、window对象
- Web 浏览器都是将Global对象作为window对象的一部分加以实现的,在全局作用域中声明的所有变量和函数,都成为了window对象的属性。
var color = "red";
function sayColor(){
alert(window.color);
}
window.sayColor(); //"red"
Math对象
- 与我们在JavaScript 直接编写的计算功能相比,Math对象提供的计算功能执行起来要快得多。
- Math 对象中还提供了辅助完成这些计算的属性和方法。
1、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的平方根 |
2、min()和max()方法
- min()和max()方法用于确定一组数值中的最小值和最大值
- 这两个方法都可以接收任意多个数值参数
var max = Math.max(3, 54, 32, 16);
alert(max); //54
var min = Math.min(3, 54, 32, 16);
alert(min); //3
- 要找到数组中的最大或最小值,可以像下面这样使用apply()方法。
var values = [1, 2, 3, 4, 5, 6, 7, 8];
var max = Math.max.apply(Math, values);
3、舍入方法
- 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
4、random()方法
- Math.random()方法返回大于等于0 小于1 的一个随机数。
- 套用下面的公式,就可以利用Math.random()从某个整数范围内随机选择一个值。
值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)
//选择一个1到10 之间的数值
var num = Math.floor(Math.random() * 10 + 1);
//选择一个2到10之间的数值
var num = Math.floor(Math.random() * 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)的一个数值
var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
var color = colors[selectFrom(0, colors.length-1)];
aler t(color); // 可能是数组中包含的任何一个字符串
5、其它方法
- Math 对象中还包含其他一些与完成各种简单或复杂计算有关的方法
方 法 | 说 明 | 方 法 | 说 明 |
---|---|---|---|
Math.abs(num) | 返回num 的绝对值 | Math.asin(x) | 返回x 的反正弦值 |
Math.exp(num) | 返回Math.E 的num次幂 | Math.atan(x) | 返回x 的反正切值 |
Math.log(num) | 返回num 的自然对数 | Math.atan2(y,x) | 返回y/x 的反正切值 |
Math.pow(num,power) | 返回num 的power次幂 | Math.cos(x) | 返回x 的余弦值 |
Math.sqrt(num) | 返回num 的平方根 | Math.sin(x) | 返回x 的正弦值 |
Math.acos(x) | 返回x 的反余弦值 | Math.tan(x) | 返回x 的正切值 |