1》本地对象:独立于宿主环境的ECMAScript实现的对象,可以new实例化比如:Object,Function,Error,String.. js的本地对象就是ECMA-262中定义的类(引用类型)
2》宿主对象:由ECMAScript实现的宿主环境提供的对象,因为本地对象是非宿主环境的对象,那么非本地对象就是宿主对象,即所有的BOM对象和DOM对象都是宿主对象,自定义对象
3》宿主环境:主要指的是web浏览器和外壳程序等
4》总结:本地对象就是ECMAScript中定义好的对象,内置对象就是本地对象中比较特殊的一种,它不用实例化包括Math,Gloabl,宿主对象就是BOM,DOM和自定义对象
27.内置对象
1》定义:由ECMAScript实现提供的,不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了,意思就是说开发人员不必显示的实例化内置对象,因为他们已经实例化过了
ECMA-262定义了两个内置对象Global,Math
2》Global对象
Global对象可以说是ECMAScript中最特别的一个对象,因为不管从什么角度上看这个对象都是不存在的,他在某种意义上作为一个终极的“兜底儿对象”换句话说就是不属于任何其他对象的属性和方法最终都是它的属性和方法。
isNaN(),isFinite(),parseInt(),parseFloat()都是Gloabl对象的方法
2.1》Global对象方法
1.1>URI编码方法
encodeURI():用于整个的url,不会对本身属于url的特殊字符进项编码,例如冒号,正斜杠,问号,井号
encodeURIComponent():用于url中的某一段,会对他发现的任何非标准字符进行编码。
这两个方法可以对URI进行编码,以便发送给浏览器。他们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解.
var uri='http://www.wroz.com/illegl.value.html#start';
console.log(encodeURI(uri));
//http://www.wroz.com/illegl%20value.html#start
console.log(encodeURIComponent(uri));
//http%3A%2F%2Fwww.wroz.com%2Fillegl%20value.html%23start
decodeURI():只能对使用encodeURI()替换的字符进行解码
decodeURIComponent():只对encodeURIComponent()编码的字符进行解码
1.2>eval()方法:
他就像是一个完整的ECMAScript解析器,他只接受一个参数就是要执行的ECMAScript或js字符串
eval("alert(1)")===alert(1)
当解析器发现代码中调用了eval()方法时,他会将传入的参数当做实际的ECMAScript来解析然后把执行结果插入到原来位置,通过eval()执行的代码被认为是包含该次调用的执行环境的一部分因此被执行的代码具有与该执行环境相同的作用域链。这意味着eval()执行的代码可以引用在包含环境中定义的变量。
var msg="hello";
eval("alert(msg)")//弹出hello
在eval()中创建的任何变量或函数不会被提升,因为在解析代码的时候他们被包含在一个字符串中,他们只在eval()执行的时候创建
console.log(msg);//Uncaught ReferenceError: msg is not defined
eval("var msg=1243");
2.2》Global对象属性
所有原生引用类型的构造函数都是Gloabl对象的属性,还有NaN,undefine,Infinity也是但是ECMAScript 5已明确禁止给他们复制
2.3》window对象
ECMASCript虽然没有指出如何直接访问Gloabl对象,但是web浏览器都将这个全局对象作为window对象的一部分加以实现,因此在全局作用域中声明的所有变量和函数就都成为了window对象的属性
var color="red";
function saycolor(){
alert(window.color)
}
window.saycolor()//“red”
3》Math对象
与js直接编写的计算功能相比,Math对象提供的计算功能执行起来要快得多,Math对象中还提供了辅助完成这些计算的属性和方法
Math对象的属性:Math对象包含的属性大多数都是数学计算中会用到的一些特殊值
Math.E 自然对数的底数,即常数e的值
Math.LN10 10的自然对数
Math.LN2 2的自然对数
Math.LOG2E 以2为底的对数
Math.LOG10E 以10为底的对数
Math.PI Π的值
Math.SQRT1_2 1/2的平方根
Math.SQRT2 2的平方根
Math的方法:
1》min():用于确定一组数值中最小值
Math.min(12,23,45,1,56,78)//1
2》max():用于确定一组数值中最大值
Math.max(12,23,45,1,56,78)//78
以上两个方法常用于避免多余的循环和if语句中确定一组数的最大值,可以接受任意多个数值参数
要找数值中的最大/小值,可以使用apply()方法
var arr=[12,23,45,1,56,78];
Math.min.apply(null,arr);
Math.max.apply(null,arr);
3》舍入法
Math.ceil():向上舍入
Marh.floor():向下舍入
Marh.round():四舍五入
console.log(Math.ceil(3.6));//4
console.log(Math.floor(3.6));//3
console.log(Math.round(3.6));//4
4》random()方法:返回大于0小于1之间的一个随机数
Math.floor(Math.random(Math.random()*可能值的总数+第一个可能值));
如果你想选择介于2-10之间的随机数
Math.floor(Math.random()*9+2)
5》其他方法
Math.cos()
Math.sin()
Math.tan()
Math.acos()
Math.asin()
Math.atan()
Math.pow(num,power) 返回num的power次幂
........
计算某个值的正弦值,余弦值,正切值的方式多种多样,也正因为如此这些方法在不同的视线中可能不同。