一、什么是单体内置对象
ECMA-262对内置对象的定义是:有ECMAScript实现提供的,不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。意思就是开发人员不必显式的实例化内置对象因为它们已经实例化了。像Object、Array、String对象都属于内置对象,在写代码时不用专门的去实例化它们。
ECMA-262还定义了两个单体内置对象:Global和Math
二、Global对像
所有全局作用域中定义的属性和函数,都是Global对象得属性。像IsNaN()、isFinite()、parseInt() 以及parseFloat()实际上都是Global对象的方法。下面是它的一些其他方法
1、URI编码方法
(1)encodeURI()和encodeURIComponent()方法:
- 这两个方法可以对URI(Uniform Resouce Identifiers,通用资源标识符)进行编码,以便发给浏览器。
- 有效的URI中不能包含某些字符,例如空格,而这两个URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字符,从而使浏览器能够接受和理解
- encodeURI()主要用于整个URI(例如:http://www.wrox.com/illegal value.htm),而encodeURIComponent()主要用于对URI中的某一段(例如前面URI中的illegal value.htm)进行编码
- 两个方法的主要区别在于:encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而encodeURIComponent()则会对它发现的任何非标准字符进行编码
例子如下:
var uri = "http://www.wrox.com/illegal value.htm#start";
alert(encodeURI(uri));//http://www.wrox.com/illegal%20value.htm#start
/*结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20*/
alert(encodeURIComponent(uri));//http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start
/*结果是用对应的编码替换所有非字母非数字字符*/
(2)decodeURI()和decodeURIComponent()方法:
- decodeURI()只能对使用encodeURI()编码的字符进行解码,例如:它可将%20替换成空格,但不会对%23做任何处理,因为%23表示井字号(#),而井字号不是使用encodeURI()编码的。同样的,decodeURIComponent()能够解码使用encodeURIComponent()编码的所有字符,即它可以解码任何特殊字符的编码。
三、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 | 构造函数TyprError |
URIError | 构造函数URIError |
ECMAScript5明确了禁止给undefined、NaN和Infinity赋值。
四、window对象
ECMAScript虽然没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现的。因此在全局作用域中声明的所有变量和函数都成为window对象的属性。
//下面声明的color变量就变成了window对象的属性
var color = "yellow";
function showColor(){
console.log(window.color);
}
showColor();//"yellow"
//下面是取得Global对象的方法
var global = function(){
return this;//this值会默认的指向window
}
五、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 | 二分之一的平方根 |
Math.SQRT2 | 2的平方根 |
2、min()和max()方法
这两个方法用于确定一组数值中的最小值和最大值,都可以接收任意多个参数
var min = Math.min(1,3,2,5,7,6);
console.log(min);//1
var max = Math.max(3,5,7,2,9,33,1);
console.log(max);//33
3、舍入方法
将小数舍为整数的几个方法:Math.ceil()、Math.floor()和Math.round(),分别遵循下列舍入规则:
- Math.ceil():执行向上舍入,向上取整
- Math.filoor():执行向下舍入,向下取整
- Math.round():执行标准舍入,即四舍五入
如下:
console.log(Math.ceil(21.9));//22
console.log(Math.ceil(21.5));//22
console.log(Math.ceil(21.1));//22
console.log(Math.floor(21.9));//21
console.log(Math.floor(21.5));//21
console.log(Math.floor(21.1));//21
console.log(Math.round(21.9));//22
console.log(Math.rounf(21.5));//22
console.log(Math.rounf(21.1));//21
4、random()方法
Math.random()方法返回一个大于0小于1的随机数
想要取得任一个范围内的数,可以按照下面操作:
例如:
var num1 = Math.random()*20;//0到20之间的一个随机数
var num2 = Matn.random()*20+5;//5到25之间的一个随机数
var num3 = Math.floor(Math.random()*20+1);//1到21之间的一个随机的整数(不包含21)
var num4 = Math.ceil(Math.random()*20+1);//1到21之间的一个随机的整数(不包含1)
总结来说就是:值=Math.floor(Math.random()*可能值的总数+第一个可能的值)
可以通过一个函数来计算可能值的总数第一个可能的值,如下:
function selectFrom(lowerValue,upperValue){
var choices = upperValue - lowerValue + 1;//此处加1是为了把最后一个数包含上
return Math.floor(Math.random()*choices + lowerValue);
}
var num = selectFrom(20,30);
console.log(num);//20到30之间的一个随机整数,包括20和30
5、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.atan(x,y) | 返回x/y的反正切值 |
Matn.sin(x) | 返回x的正弦值 |
Math.cos(x) | 返回x的余弦值 |
Math.tan(x) | 返回x的正切值 |