JavaScript内置对象之单体内置对象

什么是内置对象

JS内置对象就是指Javascript自带的一些对象,供开发者使用,这些对象提供了一些常用的的功能。开发人员不必显式地实例化内置对象,因为它们已经实例化了。

JS内置对象分为数据封装类对象和其他对象。

数据封装类对象:String,Boolean,Number,Array和Object;
其他对象:Function,Arguments,Math,Date,RegExp,Error;

什么是单体内置对象

官方对于“单体”二字并没有过多解释。通过对比,发现除了单体内置对象不用new操作符加构造函数创建实例对象外,其它内置对象的创建都需要new操作符加构造函数来创建实例对象。

所以我们可以认为单体内置对象是不需要通过new来实例化的对象。

ECMA-262定义了两个单体内置对象:Global 和 Math。

(1)Global对象

不属于任何其他对象的属性和方法,终都是它的属性和方法。事实上,没有全局变量或全局函数;所有在全局作用域中定义的属性和函数,都是 Global 对象的属性。

诸如 isNaN()、isFinite()、parseInt()以及 parseFloat(),实际上全都是 Global 对象的方法。

除此之外,Global 对象还包含其他一些方法。

URI编码方法
Global 对象的 encodeURI()和 encodeURIComponent()方法可以对 URI进行编码,以便发送给浏览器。

有效的 URI 中不能包含某些字符,例如空格。而这两个 URI编码方法就可以对 URI进行编码,它们用特殊的 UTF-8编码替换所有无效的字符, 从而让浏览器能够接受和理解。

encodeURI()主要用于整个 URI进行编码,encodeURIComponent()主要用于对 URI中的某一段进行编码。

它们的主要区别在于,encodeURI()不会对本身属于 URI 的特殊字符进行编码,例如冒号、正斜杠、 问号和井字号;而 encodeURIComponent()则会对它发现的任何非标准字符进行编码。

例如:

var uri = "http://www.wrox.com/illegal value.htm#start"; 
 
//"http://www.wrox.com/illegal%20value.htm#start" 
alert(encodeURI(uri)); 
 
//"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start" 
alert(encodeURIComponent(uri)); 
 

与 encodeURI()和 encodeURIComponent()方法对应的两个方法分别是 decodeURI()和 decodeURIComponent()。其中,decodeURI()只能对使用 encodeURI()替换的字符进行解码。例如, 它可将%20 替换成一个空格,但不会对%23 作任何处理,因为%23 表示井字号(#),而井字号不是使用 encodeURI()替换的。同样地,decodeURIComponent()能够解码使用 encodeURIComponent()编码的所有字符,即它可以解码任何特殊字符的编码。

例如:

var uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"; 
 
//http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start 
alert(decodeURI(uri)); 
 
//http://www.wrox.com/illegal value.htm#start 
alert(decodeURIComponent(uri)); 
 

eval方法

eval() 方法就像是一个完整的 ECMAScript解析器,它只接受一个参数,即要执行的 ECMAScript(或 JavaScript)字符串。

当解析器发现代码中调用 eval()方法时,它会将传入的参数当作实际的 ECMAScript语句来解析。

通过 eval()执行的代码被认为是包含该次调用的执行环境的一部分, 因此被执行的代码具有与该执行环境相同的作用域链。这意味着通过 eval()执行的代码可以引用在包含环境中定义的变量。

例如:

var msg = "hello world"; 
eval("alert(msg)");    //"hello world" 

同样地,我们也可以在 eval() 调用中定义一个函数,然后再在该调用的外部代码中引用这个函数:

eval("function sayHi() { alert('hi'); }"); 
 sayHi(); 

显然,函数 sayHi()是在 eval()内部定义的。但由于对 eval()的调用终会被替换成定义函数的实际代码,因此可以在下一行调用 sayHi()。对于变量也一样:

eval("var msg = 'hello world'; "); 
alert(msg);     //"hello world" 

在 eval()中创建的任何变量或函数都不会被提升(变量的声明不会被提升到函数的最顶部),因为在解析代码的时候,它们被包含在一个字符串中;它们只在 eval()执行的时候创建。
例如:

alert(msg);     // 报错
eval("var msg = 'hello world'; ");

Global 对象的属性
特殊的值 undefined、NaN 以及 Infinity 都是 Global 对象的属性。此外,所有原生引用类型的构造函数,像 Object 和 Function,也都是 Global 对象的属性。
在这里插入图片描述
:ECMAScript 5明确禁止给 undefined、NaN 和 Infinity 赋值。

windows对象

ECMAScript 虽然没有指出如何直接访问 Global 对象,但 Web 浏览器都是将这个全局对象作为 window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window 对象的属性。

(2)Math对象
即 Math 对象是保存数学公式和信息的一个公共位置,Math 对象提供了辅助完成这些计算的属性和方法。

Math对象的属性:
在这里插入图片描述
min()和 max()方法
min()和 max()方法用于确定一组数值中的小值和大值。这两个方法都可以接收任意多个数值参数。

例如:

var max = Math.max(3, 54, 32, 16); 
alert(max);    //54 
 
var min = Math.min(3, 54, 32, 16); 
alert(min);    //3 
 

要找到数组中的大或小值,可以像下面这样使用 apply()方法。

var values = [1, 2, 3, 4, 5, 6, 7, 8]; 
var max = Math.max.apply(Math, values); 

这个技巧的关键是把 Math 对象作为 apply()的第一个参数,从而正确地设置 this 值。然后,可以将任何数组作为第二个参数。

其中:
apply方法能劫持另外一个对象的方法,继承另外一个对象的属性。
Function.apply(obj,args)方法能接收两个参数。
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args–>arguments)

舍入方法

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

random()方法 :

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

套用下面的公式,就可以利用 Math.random() 从某个整数范围内随机选择一个值。值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)

如果你想选择一个 1 到 10之间的数值,可以像下面这样编写代码:

var num = Math.floor(Math.random() * 10 + 1); 

多数情况下,其实 都可以通过一个函数来计算可能值的总数和第一个可能的值,例如:

 function selectFrom(lowerValue, upperValue) {
      var choices = upperValue - lowerValue + 1;     
      return Math.floor(Math.random() * choices + lowerValue); 
      } 

其它方法

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值