JS引用类型(6)——单体内置对象类型

【7】单体内置对象

内置对象:由ECMAScript实现提供的、不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。

(1)Global对象

  在所有代码执行前,作用域中就已经存在两个内置对象:Global和Math。在大多数ECMAScript实现中都不能直接访问Global对象;不过,web浏览器实现了承担该角色的window对象。全局变量和函数都是Global对象的属性。  

  不属于任何其他对象的属性和方法,最终都是它的属性和方法;所有在全局作用域中定义的属性和函数,都是Global对象的属性;诸如isNaN()、isFinite()、parseInt()以及parseFloat(),都是Global对象的方法。

1》URL编码方法

  Global对象的encodeURL()和encodeURLComponent()方法可以对URI(通用资源标识符)进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这两个URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解。
其中,encodeURL()主要用于整个URI,而encodeURLComponent()主要用于对URI中的某一段进行编码。它们的主要区别在于,encodeURL()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而encodeURLComponent()则会对它发现的任何非标准字符进行编码。
与其对应的两个解码方法分别是:decodeURI()和decodeURIComponent()。其中,decodeURI()只能对使用encodeURL()替换的字符进行解码;同样地,decodeURIComponent()只能对使用encodeURLComponent()替换的字符进行解码。

2》eval()方法

eval()方法就像一个完整的ECMAScript解析器,它只接受一个参数,即要执行的JavaScript字符串。
eval("alert('hi')"); == eval("hi");
当解析器发现代码中调用eval()方法,它会将传入的参数当作实际的ECMAScript语句来解析,然后把执行结果插入到原位置。通过eval()执行的代码会被认为是包含该次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链。这意味着通过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()执行的时候创建。
严格模式下,在外部访问不到eval()中创建的任何变量或函数,因此前面两个例子都会导致错误。同样,在严格模式下,为eval赋值也会导致错误
能够解释代码字符串的能力非常强大,但也非常危险。因此在使用eval()时必须极为谨慎,特别是在用它执行用户输入数据的情况下。否则,可能会有恶意用户输入威胁你的站点或应用程序安全的代码(即所谓的代码注入)。

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

 

 

 

 

 

 

            


                     
                          
           

ECMAscript5明确禁止给undefined、NaN和Infinity赋值,这样做即使在非严格模式下也会导致错误。

4》window对象

web浏览器将这个全局对象作为window对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了window对象的属性。
另一种取得Global对象的方法是通过返回this来获取Global对象。

var global = function(){
return this;
}();

(2)Math对象

1》Math对象的属性

属性  说明 属性 说明
Math.E 自然对数的底数,即常量e的值 Math.LOG10E  以10为底e的对数
Math.LN10 10的自然对数 Math.PI π的值
Math.LN2 2的自然对数 Math.SQRT1_2 1/2的平方根(即2的平方根的倒数)
Math.LOG2E 以2为底e的对数 Math.SQRT2  2的平方根

 

 

 

 


   
2》min()和max()方法

min()和max()方法用于确定一组数值中的最大值和最小值。这两个方法都可以接受任意多个数值参数。

//使用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.floor(25.9)); //25
alert(Math.floor(25.5)); //25
alert(Math.floor(25.1)); //25

alert(Math.round(25.9)); //26
alert(Math.round(25.5)); //26
alert(Math.round(25.1)); //26

4》random()方法

Math.random()方法返回大于等于0小于1的一个随机数。

值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)

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)];
alert(color);    //数组中包含的任意字符串

5》其他方法

方法 说明 方法 说明
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的正切值

 

 

 

 

 


   

posted @ 2016-09-26 16:46  木子拖拖  阅读(561)  评论(0编辑  收藏  举报