《JavaScript高级程序设计》学习笔记(对象2)

本文深入探讨了JavaScript中的内置对象Global和Math,详细介绍了它们的方法和属性,并提供了实用示例。

《JavaScript高级程序设计》学习笔记(对象2)

内置对象

ECMA-262把内置对象(built-in object)定义为“由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262只定义了两个内置对象,即Global和Math(它们也是本地对象,根据定义,每个内置对象都是本地对象)。


1. Global对象

Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在。

在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。
函数如isNaN()、isFinite()、parseInt()和parseFloat()等,看起来都像独立的函数。实际上,它们都是Global对象的方法。


encodeURI() 和 encodeURIComponent() 方法 用于编码传递给浏览器的URI(统一资源标识符)。

encodeURI()方法用于处理完整的URI(例如,http://www.wrox.com/illegal value.htm),而encodeURIComponent()用于处理URI的一个片断(如前面的URI中的illegal value.htm)。
区别:encodeURI()方法不对URI中的特殊字符进行编码,如冒号、前斜杠、问号和英镑符号,而encodeURIComponent()则对它发现的所有非标准字符进行编码。

decodeURI() 和 decodeURIComponent() 方法 用于解码编码过的URI
decodeURI()方法只对用encodeURI()方法替换的字符解码。例如,%20将被替换为空格,而%23不会被替换,因为它表示的是英镑符号(#),encodeURI()并不替换这个符号。同样的,decodeURIComponent()会解码所有encodeURIComponent()编码过的字符,意味着它将对所有的特殊值解码。


eval() 方法 解释程序,接受一个参数,即要执行的ECMAScript(或JavaScript)字符串

例如:
eval("alert('hi');");
等价于:
alert("hi");

当解释程序发现eval()调用时,它将把参数解释为真正的ECMAScript语句,然后把它插入该函数所在的位置。这意味着eval()调用内部引用的变量可在参数以外定义:
例如:
var msg = "hi";
eval("alert(msg);");
变量msg是在eval()调用的环境外定义的,第二行代码将被替换为一行真正的代码。

同样,可以在eval()调用内部定义函数或变量,然后在函数外的代码中引用
例如:
eval("var msg = 'hi';")
alert(msg);

注意:
var msg = "hi";
eval("alert("+msg+");");
这里会显示出错,因为第二行代码将被替换为"alert(hi);",这里"hi"会被看作变量,显然不正确
如果"hi"刚好是一个已经定义的字符串,就不会报错,这会导致很多不必要的麻烦,要特别注意
对于字符串正确的写法是:
var msg = "hi";
eval("alert('"+msg+"');");
更加好的写法是:
var msg = "hi";
eval("alert(msg);");

注意:这种功能非常强大,不过也非常危险。使用eval()时要极度小心,尤其在给它传递用户输入的数据时。恶意的用户可能会插入对站点或应用程序的安全性有危害的值(叫做代码注入)。


Global对象不只有方法,它还有属性。
包括那些特殊值undefined、NaN和Infinity。此外,所有本地对象的构造函数也都是Global对象的属性。属性:
属    性 说    明
undefined Undefined类型的字面量
NaN  非数的专用数值
Infinity 无穷大值的专用数值
Object  Object的构造函数
Array  Array的构造函数
Function Function的构造函数
Boolean  Boolean的构造函数
String  String的构造函数
Number  Number的构造函数
Date  Date的构造函数
RegExp  RegExp的构造函数
Error  Error的构造函数
EvalError EvalError的构造函数
RangeError RangeError的构造函数
ReferenceError ReferenceError的构造函数
SyntaxError SyntaxError的构造函数
TypeError TypeError的构造函数
URIError URIError的构造函数

 

2. Math对象

Math对象的属性:
属    性 说    明
E  值e,自然对数的底
LN10  10的自然对数
LN2  2的自然对数
LOG2E  以2为底E的对数
LOG10E  以10为底E的对数
PI  值π
SQRT1_2  1/2的平方根
SQRT2  2的平方根


min() 方法和 max() 方法 判断一组数中的最大值和最小值
这两个方法都可接受任意多个参数:
Math.min([number1[, number2[. . . [,numberN]]]])
Math.max([number1[, number2[. . . [,numberN]]]])
例如:
alert(Math.min(12,75,25,36));
alert(Math.max(12,75,25,36));
会返回12和75


abs() 方法 返回数字的绝对值
Math.abs(number)
例如:
alert(Math.abs(-8));
会返回8


ceil() floor()和round() 方法 把小数舍入成整数
区别:
方法ceil()表示向上舍入函数,总是把数字向上舍入到最接近的值。
方法floor()表示向下舍入函数,总是把数字向下舍入到最接近的值。
方法round()表示标准的舍入函数,如果数字与下一个整数的差不超过0.5,则向上舍入,否则向下舍入。


exp() 方法 把Math.E升到指定的幂
log() 方法 返回特定数字的自然对数
pow() 方法 把指定的数字升到指定的幂
sqrt() 方法 返回指定数字的平方根

方法pow()用于把数字升到指定的幂
例如:
Math.sqrt(2,3);
即2的三次方,将返回8
注意:不建议把Math.E作为pow()方法的基数。最好使用exp()对Math.E进行升幂运算,因为它是专用运算,计算出的值更精确。

方法sqrt(),用于返回指定数字的平方根。它只有一个参数,即要求平方根的数字。
例如:
Math.sqrt(4);
将返回2
相当于方法pow()的:Math.sqrt(4,0.5);


Math对象还有一整套三角函数方法:
方    法 说    明
acos(x)  返回x的反余弦值
asin(x)  返回x的反正弦值
atan(x)  返回x的反正切值
atan2(y,x) 返回y/x的反余弦值
cos(x)  返回x的余弦值
sin(x)  返回x的正弦值
tan(x)  返回x的正切值

即使这些方法是ECMA-262定义的,结果也是由实现决定的,因为每个值的计算方法都有很多,从而使得不同的实现生成的结果的精度也不同。


random() 方法 返回一个0到1之间的随机数,不包括0和1

可用下面的形式调用random()方法,在某个范围内选择随机整数值:
number = Math.floor(Math.random() * total_number + first_number)

例如想选择一个2到10之间的随机整数:
var iNum = Math.floor(Math.random() * 9 +2);
这里2到10共9个整数,从2开始 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值