单体内置对象:由ECMAscript实现提供的,不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。
Global对象在某种意义上是一个终极的兜底对象,不属于其他任何对象的属性和方法,最终都是它的属性和方法。实际上,没有全局变量或全局函数,所有在全局作用域中定义的属性和函数,都是Global对象的属性。如isNaN,isFinite等。
有效的URI中不能包含某些字符,如空格。因此这两个URI方法就可以对URI进行编码,用特殊的UTF-8编码替换所有无效的字符,从而让浏览器可以接受和理解。
encodeURI主要用于整个URI,且不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号。
因此一般对整个URI使用encodeURI,却只能对附加在现有URI后面的字符串使用encodeURIComponent。
只接受一个参数,即要执行的ECMAScript的字符串。
eval("alert('hi')");
var msg = "hello world";
eval("alert(msg)");
也可以在eval中定义一个函数,然后再在该调用的外部代码中引用这个函数。
eval("function sayHi(){alert('hi');}");
sayHi();
但是在eval中创建的任何变量或函数都不会被提升,因为在解析代码的时候他们被包含在一个字符串中。它们只在eval执行的时候创建。
严格模式下,在外部访问不到eval中创建的任何变量或函数,因此前面的例子会报错。在严格模式下,为eval赋值也会导致错误。
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(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
值 = 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)]; //随机取出一个函数
还有许多涉及各种计算的方法,不展开了