单体内置对象:由ECMAscript实现提供的,不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。
Global对象
Global对象在某种意义上是一个终极的兜底对象,不属于其他任何对象的属性和方法,最终都是它的属性和方法。实际上,没有全局变量或全局函数,所有在全局作用域中定义的属性和函数,都是Global对象的属性。如isNaN,isFinite等。
URI编码方法
- Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,以便发送给浏览器。
有效的URI中不能包含某些字符,如空格。因此这两个URI方法就可以对URI进行编码,用特殊的UTF-8编码替换所有无效的字符,从而让浏览器可以接受和理解。
encodeURI主要用于整个URI,且不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号。
因此一般对整个URI使用encodeURI,却只能对附加在现有URI后面的字符串使用encodeURIComponent。
- 与上两个方法对应的分别是decodeURI和decodeURIComponent。
- decodeURI 只能对encodeURI替换的字符进行解码,例如它能将%20替换成一个空格,却不会对%23做任何处理,因为%23表示井字号,而井字号不是使用encodeURI替换的。
- 同样,decodeURIComponent能够解码用encodeURIComponent编码的所有字符
eval()
只接受一个参数,即要执行的ECMAScript的字符串。
eval("alert('hi')");
- 当解析器发现代码中调用eval方法时,他会将传入的参数当做实际的ECMAScript语句来解析,然后把执行结果插入到原位置。
- 通过eval执行的代码被认为是包含该次调用的执行环境的一部分,因此被执行的代码就具有与该执行环境相同的作用域链。这意味着通过eval执行的代码可以引用在包含环境中定义的变量。
var msg = "hello world";
eval("alert(msg)");
也可以在eval中定义一个函数,然后再在该调用的外部代码中引用这个函数。
eval("function sayHi(){alert('hi');}");
sayHi();
但是在eval中创建的任何变量或函数都不会被提升,因为在解析代码的时候他们被包含在一个字符串中。它们只在eval执行的时候创建。
严格模式下,在外部访问不到eval中创建的任何变量或函数,因此前面的例子会报错。在严格模式下,为eval赋值也会导致错误。
Math对象
min() max()
- 用于确定一组数值中的最小值和最大值。
- 可以接受任意多个数值参数。
var max = Math.max(3,54,32,16);//54
var min = Math.min(3,54,32,16);//3
这个方法经常用于避免多余的循环。
要找到数组中的最大或最小值,可以像下面这样使用apply方法:
var values = [1,2,3,4,5,6,7,8];
var max = Math.max.apply(Math,values);
关键是把Math对象作为apply的第一个参数,从而正确地设置this值。
而在ES6中,可以使用扩展运算符:
var values = [1,2,3,4,5,6,7,8];
var max = Math.max(...values);
扩展运算符会自动将values扩展为一个一个的参数传入到max方法中,这样就不用使用令人混淆的apply方法了。
舍入方法
- Math.ceil():执行向上舍入,总是将数值向上舍入为最接近的整数。
- Math.floor():执行向下舍入,总是将数值向下舍入为最近的整数。
- Math.round():执行标准舍入,总是将数值四舍五入为最接近的整数。
Math.ceil(25.9); //26
Math.ceil(25.5); //26
Math.ceil(25.1); //26
Math.round(25.9); //26
Math.round(25.5); //26
Math.round(25.1); //25
Math.floor(25.9); //25
Math.floor(25.5); //25
Math.floor(25.1); //25
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);
利用这个函数可以方便地从数组中随机取出一项:
var colors = ["red","green","blue","yellow","black"];
var color = colors[selectFrom(0,colors.length-1)]; //随机取出一个函数
其他
还有许多涉及各种计算的方法,不展开了