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

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

官方对于"单体"二字其实没有显性的表达,看了很多书籍和大牛的网站,都是含糊两口,其实就我自己也没完全搞清楚这个几个名词,“引用类型”,“单体”内置对象,"内置对象"这些词的区别,按介绍说,内置对象是不依赖于宿主环境的对象,这些对象在程序执行之前就已经存在了,开发人员不必显示地实例化内置对象,因为它们已经实例化了。
简而言之,单体内置对象是不需要通过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"   空格变成了%20
console.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);    //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对象中还包含了一些与完成各种简单或复杂计算有关的方法:


三角函数相关的方法:




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值