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

    xiaoxiao2021-03-26  21

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

    官方对于"单体"二字其实没有显性的表达,看了很多书籍和大牛的网站,都是含糊两口,其实就我自己也没完全搞清楚这个几个名词,“引用类型”,“单体”内置对象,"内置对象"这些词的区别,按介绍说,内置对象是不依赖于宿主环境的对象,这些对象在程序执行之前就已经存在了,开发人员不必显示地实例化内置对象,因为它们已经实例化了。 简而言之,单体内置对象是不需要通过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 value.html#start"   空格变成了 console.log(encodeURI(uri));    //"http://www.wrox.com%2illegal value.html#start"  冒号、正斜杠、问号、井字号都被转码 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);    //54 var min=Math.min(3,54,32,16); console.log(min);   //3 三、舍入方法 Math.ceil() : 执行向上舍入,它总将数值向上舍入为最接近的整数 Math.floor() : 执行向下舍入,它总将数值向下舍入为最接近的整数 Math.round() : 执行四舍五入,它总将数值四舍五入为最接近的整数 console.log(Math.ceil(25.9)); //26 console.log(Math.ceil(25.5)); //26 console.log(Math.ceil(25.1)); //26   console.log(Math.floor(25.9));   //25 console.log(Math.floor(25.5));   //25 console.log(Math.floor(25.1));  //25 console.log(Math.round(25.9));   //26 console.log(Math.round(25.5));   //26 console.log(Math.round(25.1));  //25 舍入的比较: 1. M ath.ceil()/Math.floor()    VS    str.parseInt() 前者的参数是number,且必须用Math调用,而且不能去掉以字符串结尾的非数字字符 后者的参数是string,是专门用来去掉字符结尾的非数字字符 那问题来了,如果遇到"25.67abc" 我们该怎么转换为整数数字? 首选使用parseFloat var text = parseFloat("25.67abc"); console.log(text);   //26 2.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对象中还包含了一些与完成各种简单或复杂计算有关的方法: 三角函数相关的方法:
    转载请注明原文地址: https://ju.6miu.com/read-660777.html

    最新回复(0)