说说 JavaScript 内置对象(Global 对象、Math 对象)

所谓的内置对象就是不必显式实例化内置对象,因为在程序执行之前已经被实例化,直接可用了。

1 Global 对象

不属于任何其他对象的属性和方法,都是 Global 对象的属性和方法。 所有在全局作用域中定义的属性和方法,也都是它的属性和方法。

1.1 URI 编码方法

这两个方法可以对 URI(Uniform Resource Identifier,通用资源标识符)进行编码,以便发送给服务器。它们用 UTF-8 编码替换所有无效的字符。

encodeURI() 用于整个 URI 进行编码,她不会对本身属于 URI 中的特殊字符进行编码。

encodeURIComponent() 对 URI 中的某一段进行编码,她会对任何非标准字符进行编码。


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


注意: 一般来讲,encodeURIComponent() 用的比较多,因为在实践中更常对查询字符串进行编码。


encodeURI() 对应的解码方法是 decodeURI()。

encodeURIComponent() 对应的解码方法是 decodeURIComponent()。

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

注意: escape() 和 unescape() 方法已被废弃,所以在产品级的代码中,请一定使用 URI 方法。


1.2 eval() 方法

她只接受一个参数,即要执行的 ECMAScript 字符串:

eval("alert('hi')");

等价于

alert('hi');

通过 eval() 执行的代码具有与该执行环境相同的作用域链,即这些代码可以引用在包含环境中定义的变量:

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

也可以在 eval() 中定义的一个函数,然后在该调用的外部代码中引用她:

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

严格模式下,在外部访问不到 eval() 中创建的任何变量或函数,而且为 eval 赋值也会导致错误。


注意: 因为 eval() 很强大,所以在使用时要非常谨慎,特别是在用它执行用户输入数据的情况下,因为可能会发生代码注入的安全问题。


1.3 Global 对象的属性

属性说明
undefined特殊值
NaN特殊值
Infinity特殊值
Object构造函数
Array构造函数
Function构造函数
Boolean构造函数
String构造函数
Number构造函数
Date构造函数
RepExp构造函数
Error构造函数
EvalError构造函数
RangeError构造函数
ReferenceError构造函数
SyntaxError构造函数
TypeError构造函数
URIError构造函数

ECMAScript 5 禁止给 undefined、NaN 和 Infinity 赋值。

1.4 window 对象

ECMAScript 没有定义如何直接访问 Global 对象,但浏览器都将这个全局对象作为 window 对象的一部分加以实现。因此在全局作用域中定义的属性和方法,都成为这个 window 对象的属性和方法:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>在全局作用域中声明的所有变量和函数,都成为 window 对象的属性</title>
</head>
<body>

<script type="text/javascript">
    var color = "red";
    function sayColor() {
        console.log(window.color);
    }
    window.sayColor();//red
</script>
</body>
</html>

注意: window 对象除了作为 Global 对象的角色外,还承担了很多任务,以后讲到浏览器对象模型时,会详细说明。


另一种取得 Global 对象的方法是:

var global = function(){
    return this;
}();

因为在没有给函数明确指定 this 值的情况下,this 值等于 Global 对象。

2 Math 对象

Math 对象提供的计算功能与直接编码相比,执行速度会快很多。

2.1 Math 对象的属性

属性说明
Math.E自然对数的底数,即常量 e
Math.LN1010 的自然对数
Math.LN22 的自然对数
Math.LOG2E以 2 为底的对数
Math.LOG10E以 10 为底的对数
Math.PIπ
Math.SQRT1_21/2 的平方根
Math.SQRT22 的平方根

2.2 min() 和 max()

她们能够确定一组数值中的最大值和最小值,接受任意多个数值参数:

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

要找到数组中的最大值和最小值,可以使用 apply() 方法:

 var values = [1, 2, 3, 5, 6, 7, 8];
var max = Math.max.apply(Math, values);//Math 作为 apply() 的第一个参数,从而正确地设置 this 值。
console.log(max);//8

2.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.round(25.9));//26
console.log(Math.round(25.5));//26
console.log(Math.round(25.1));//25

console.log(Math.floor(25.9));//25
console.log(Math.floor(25.5));//25
console.log(Math.floor(25.1));//25

2.4 random() 方法

她返回 0 与 1 之间的随机数,不包括 0 和 1。

下面的这个公式可以从某个整数范围内随机选择一个值:

值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)

比如,想选择 1 到 10 之间的数值:

console.log(Math.floor(Math.random() * 10 + 1));//1-10

想选择 2 到 10 之间的数值:

 console.log(Math.floor(Math.random() * 9 + 2));//2-10

可以通过一个函数来计算可能值的总数以及第一个可能的值:

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

var num = selectFrom(2, 10);
console.log(num);//2-10

利用上面这个函数,可以方便地从数组中随机取出一项:

var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
var color = colors[selectFrom(0, colors.length - 1)];
console.log(color);//colors 数组中随机取出任意颜色

2.5 其他方法

方法说明
Math.abs(num)num 的绝对值
Math.exp(num)Math.E 的 num 次幂
Math.log(num)num 的自然对数
Math.pow(num,power)num 的 power 次幂
Math.sqrt(num)num 的 平方根
Math.acos(num)num 的反余弦值
Math.asin(num)num 的反正弦值
Math.atan(num)num 的反正切值
Math.atan2(y,x)y/x 的反正切值
Math.cos(num)num 的余弦值
Math.sin(num)num 的正弦值
Math.tan(num)num 的正切值

ECMA-262 只规定了这些方法,但不同的实现会采用不同的算法,因此也可能会有不同的精度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值