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