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

    xiaoxiao2021-03-25  130

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

    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 value.html#start console.log(encodeURIComponent(uri));//http://www.163.com/illegal value.html#start

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


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

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

    var uri = "http://www.163.com/illegal value.html#start"; console.log(decodeURI(uri));//http://www.163.com/illegal value.html#start 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自然对数的底数,即常量 eMath.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 只规定了这些方法,但不同的实现会采用不同的算法,因此也可能会有不同的精度。

    转载请注明原文地址: https://ju.6miu.com/read-12210.html

    最新回复(0)