首页 > 网站 > WEB开发 > 正文

JavaScript内置对象--单体内置对象(Global、Math)详解

2024-04-27 15:06:40
字体:
来源:转载
供稿:网友

一、什么是单体内置对象?

官方对于"单体"二字其实没有显性的表达,看了很多书籍和大牛的网站,都是含糊两口,其实就我自己也没完全搞清楚这个几个名词,“引用类型”,“单体”内置对象,"内置对象"这些词的区别,按介绍说,内置对象是不依赖于宿主环境的对象,这些对象在程序执行之前就已经存在了,开发人员不必显示地实例化内置对象,因为它们已经实例化了。简而言之,单体内置对象是不需要通过new来实例化的,例如我们的string可以new,但是Math是不要new的,因为可以直接使用Math的API。

Global类

Global对象是javaScript中最特别的一个对象。不属于任何其他对象的属性和方法,最终都是它的属性和方法。实际上,没有全局变量或全局作用域,所有在全局作用域中定义的属性和函数,都是Global对象的属性。一、URI编码方法1.encodeURI()/encodeURIComponent() : 这两个方法用于对URI进行编码,有效的URI中不能包含某些字符,例如空格。他们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解。encodeURI(): 这个方法用于整个URI(例如,http://www.wrox.com/illegal  value.html)进行编码encodeURIComponent() : 这个方法只对URI中的每一段(例如: illegal  value.html)进行编码这两个方法的区别是:encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号、井字号encodeURIComponent()则会对它发现的任何非标准字符进行编码var uri = "http://www.wrox.com/illegal value.html#start";//"http://www.wrox.com/illegal%20value.html#start"   空格变成了%20console.log(encodeURI(uri));   //"http%3A%2F%2Fwww.wrox.com%2illegal%20value.html%23start"  冒号、正斜杠、问号、井字号都被转码console.log(encodeURIComponent(uri));  2.decodeURI()与decodeURIComponent() : 这两个方法是与encodeURI()/encodeURIComponent()对应的两个方法,是对这两个方法进行解码,decodeURI()只能对encodeURI()解码,decodeURIComponent()只能对encodeURIComponent()解码二、eval()方法eval()方法支接收一个参数,即要执行的Javascript字符串,举个例子:eval(alert("hello"));这段代码的执行结果等同于alert("hello")当解析器调用eval()方法时,会将传入的参数作为实际的JavaScript语句解析,然后将执行结果插入原来的位置。通过eval()执行的代码被认为是包含该次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链。这意味着通过eval()执行的代码可以引用在包含环境中定义的变量,举个例子:var msg="hello world";eval("alert(msg)");   //"hello world"可见,变量msg是在eval()调用的环境之外定义的,但其中调用的alert()仍然能够显示"hello world"同样地,可以在eval()中定义一个函数,然后再在该调用的外部引用这个函数:eval("function sayHi(){ alert ("h1")}");  sayHi();函数sayHi()是在eval()内部定义的,但由于对eval()的调用最终会被替换成定义函数的实际代码。注意:在eval()中创建的任何变量或函数都不会被提升,在解析代码时,它们被包含在一个字符串中;只有在eval()执行时才创建。三、window对象JavaScript没有指出如何直接访问Global对象,但是web浏览器都是将它作为window对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,都称为window对象的属性。var color="red";function sayColor(){alert(window.color);}window.sayColor(); //"red"上面定义了一个全局变量color和全局函数sayColor()方法,在函数内部通过window.color来访问color变量,说明全局变量color是window对象的属性。然后通过window.sayColor()来调用sayColor()方法,说明sayColor()是window对象的方法。另一种取得Global对象的方法是使用以下代码:var global = function(){return this;}();this的值等于Global对象

Math类

Math对象是专门封装数学计算的常量和API的对象,不能new,直接使用!!一、Math对象的属性最常使用到的无非就是Math.PI了二、min()和max()方法min()和max()方法用于确定一组数值中的最小值和最大值。var max=Math.max(3,54,32,16);console.log(max);    //54var min=Math.min(3,54,32,16);console.log(min);   //3三、舍入方法Math.ceil() : 执行向上舍入,它总将数值向上舍入为最接近的整数Math.floor() : 执行向下舍入,它总将数值向下舍入为最接近的整数Math.round() : 执行四舍五入,它总将数值四舍五入为最接近的整数console.log(Math.ceil(25.9)); //26console.log(Math.ceil(25.5)); //26console.log(Math.ceil(25.1)); //26 console.log(Math.floor(25.9));   //25console.log(Math.floor(25.5));   //25console.log(Math.floor(25.1));  //25console.log(Math.round(25.9));   //26console.log(Math.round(25.5));   //26console.log(Math.round(25.1));  //25舍入的比较:1.Math.ceil()/Math.floor()    VS    str.parseInt()前者的参数是number,且必须用Math调用,而且不能去掉以字符串结尾的非数字字符后者的参数是string,是专门用来去掉字符结尾的非数字字符那问题来了,如果遇到"25.67abc" 我们该怎么转换为整数数字?首选使用parseFloatvar text = parseFloat("25.67abc");console.log(text);   //262.Math.round()     VS   toFixed()前者必须用Math调用,且只能取整数,返回值是一个number,可以直接算数计算后者可以被任何数字类型的值调用,返回值是一个string,要先转换为number在来计算四、 Math.random()方法Math.random() : 返回值是一个大于等于0小于1的一个随机数,这个方法经常在开发中使用,专门用来随机生产一个数字的方法公式: 值 = Math.floor(Math.random()*可能值的总数+第一个可能的值)使用Math.floor的原因是因为Math.random() 总返回一个小数值举个例子,如果你想选取1~10之间的数值,可以这样写:var num = Math.floor(Math.random()*10+1);总共有10个可能的值,而第一个可能是1。如果想要一个介于2~10之间的数值,可以这样写:var  num =Math.floor(Math.random()*9+2);总共有9个可能的值,而第一个可能是2。五、其他方法Math对象中还包含了一些与完成各种简单或复杂计算有关的方法:三角函数相关的方法:
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表