• 内置对象及垃圾回收机制GC


    ECMA-262对内置对象的定义是:由ECMAscript实现提供的,不依赖宿主环境的对象,这些对象在ECMAscrpt程序执行之前就已经存在了。意思就是说,开发人员不必显示地实例化内置对象;因为她们呢已经实例化了。ECMA-262只定义了两个内置对象,Global和math。

      一、Global对象

          Global(全局)对象时ECMAscript中一个特别的对象,因为这个对象是不存在的,在ECMAscript中不属于任何其他对象的属性和方法,都属于它的属性和方法。所以,事实上,并不存在全局变量和全局函数;所有在全局作用域定义的变量和函数,都是Global对象的属性和方法。

      PS:因为ECMAscript没有定义怎么调用Global对象,所以,Global.属性或者Global.方法()都是无效的(web浏览器将Global作为window对象的一部分加以实现)

      Global对象有一些内置的属性和方法:

        1.URI编码方法

          URI编码可以对连接进行编码,以便发送给浏览器,他们采用特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解。  

          encodeURI()不会对本身属于URL的特殊字符进行编译,例如 冒号 正斜杠、问号和#号

    而encodeComponent()则会对它发现的任何非标准字符进行不编码

     

    var box="//lee 杜伟";
    alert(encodeURI(box));   ////lee没有转换   中文转换了  注意是URI  不是URL
    alert(encodeURIComponent(box));   //特殊字符和中文编码了

    PS:因为encodeURIComponent()编码比encodeURI编码来的更加彻底,一般来说encodeURIComponent使用频率更高一些

      使用了URI编码过后,还可以进行解码,通过decodeURI和decodeURIComponent()来进行解码

     

    var box="//lee 杜伟";
    var b=encodeURI(box);   ////lee没有转换   中文转换了  注意是URI  不是URL
    alert(encodeURIComponent(box));   //特殊字符和中文编码了
    alert(decodeURI(b));                //解码成功

    PS:URI方法如上所述的四种,用于代替已经被ECMA-262第三版废弃的escape()和unescape()方法。URI方法能够编码所有的Unicodde字符,而原来的只能正确地编码ASCII字符。所以建议不要在使用escape()和unescape()方法

      2.eval()方法

        eval()方法主要担当一个字符串解析器的作用,它只接收一个参数,而这个参数就是要执行的javascript代码的字符串。

    // "var box=100;";      //这是一个字符串
    // alert(box);            //出错,因为你没有定义box变量  系统找不到
    
    eval("var box=100;");     //使用eval解析器
    alert(box);                    //解析成功  输出100
    
    alert("alert(100)");        //打印alert(100)
    eval("alert(100)");            //返回100 解析成功
    
    eval('function box(){return 123}');     //函数也是可以的
    alert(box());
    //eval方法可以拼接javascript代码,字符串解析成代码

    eval方法功能很强大,但也非常危险,因此使用的时候必须极为谨慎,特别是在用户输入数据的情况下,非常有可能导致程序的安全性,比如代码注入等等。

      3.Global对象属性

        Global对象包含了一些属性,undefined、NaN、Object、Array、Function等等

    alert(Array);     //返回Array构造方法

      4.window对象

        之前已经说明了,Global没有办法直接访问,为web浏览器可以使用window对象来实现--全局访问

    alert(window.Array);

      二、Math对象

        ECMAscript还为保存数学公式和信息提供了一个对象,即Math对象,与我们在javascript直接编写计算功能相比,Math对象提供的计算执行起来要快的多。

      1.Math对象的属性

        Math对象包含的属性大都是数学计算中可能会用到一些特殊的值

        Math.E            自然对数的底数,即常量e的值

        Math.LN10            10的自然对数

        Math.LN2           2的自然对数

        Math.LOG2E          以2为底e的对数

        Math.PI            π的值

        Math.SQRT1_2          1/2的平方根

        Math.SQRT2          2的平方根

    alert(Math.PI);      //圆周率

      2.min()和max()方法

        Math.min()用于确定一组数值中的最小值。Math.max()用于确定一组数值中最大的值

          

    alert(Math.min(1,4.5,6.7,5));            //最小值
    alert(Math.max(2,34,5,32,2,5,2,3,423));    //最大值

      3.舍入方法

         Math.ceil()执行向上舍入,即他总是将数值向上舍入为最接近的整数

         Math.floor()执行向下舍入,即他重视将数值向下舍入为最接近的整数

         Math.round()执行标准舍入,即他总是将数值四舍五入为最接近的整数

      4.random()方法

        Math.random()方法返回介于0到1之间一个随机数,不包括0和1,如果想大于这个范围的画,可以套用下一个公式:

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

        

    alert(Math.floor(Math.random()*10+1));  //随机产生1-10之间的任意数
    alert(Math.floor(Math.random()*10+1));            
    //随机产生1-10之间的任意数
    //理解:    Math.random()  是随机产生0-1之间不包含0和1的数    
    //乘以10是总数
    //加上1最小的从1开始
    //Math.floor()向下舍入
    // 产生0-1之间10个随机数
    for (var i=0;i<=9;i++) {
        document.write(Math.random())
        document.write("<br>");
    }
    
    
    //产生1-10之间10个随机数
    for (var i=0;i<=9;i++) {
        document.write(Math.floor(Math.random()*10+1))
        document.write("<br>");
    }
    
    //产生5-10之间10个随机数,多少随机数=6+5-1;
    for(var i=0;i<=9;i++){
        document.write(Math.floor(Math.random()*6+5));    //6+5-1=10
        document.write("</br>");
    }
    
    
    //使用函数产生随机数
    function select(start,end){
        var sum=end+start-1;
        for(var i=start;i<=sum;i++){
            document.write(Math.floor(Math.random()*sum+start));
            document.write("</br>");
        }
        
    }
    
    select(1,20);

                    其他方法

        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(x)           返回x的反余弦值

        Math.asin(x)            返回x的反正弦值

        Math.atan(x)            返回x的反正切值

        Math.atan2(y,x)          返回y/x的反正切值

        Math.cos(x)             返回x的余弦值

        Math.sin(x)            返回x的正弦值

        Math.tan(x)            返回x的正切值

    堆栈溢出  当存储的数据达到某一限制时就会造成堆栈溢出

      内存泄漏,当不断的向堆中存储数据,而不进行清理,这就是内存泄漏

    垃圾回收

      语言中一般分为两种,一种是自动清理,一种是手动清理gc,js只有自动清理

      垃圾回收机制就是将引用堆中渎职的对象设置null,并且将所有引用该地址的对象都设置为null

      不会即时清除,垃圾回收车会根据内存的情况在适当的时候清楚对中的孤儿对象

    如:

      

    var obj{
          a:"duwei",
          b:30
        
    }
    
    //创建对象obj 在桟中 obj 存储的时候 堆中a:"duwei" b:30 的地址
    
    当obj =null 的时候,堆中的数据没有在桟中被引用(孤儿) 垃圾就回收了
    如果 obj1=obj;  obj=null 也不会被回收  因为obj1在引用
  • 相关阅读:
    领域建模
    中科院
    开放搜索服务OpenSearch
    GUIForDebug
    java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错(转)
    new TimerTask(robot)(转)
    lua-TestMore(转)
    Lua 数据库访问(转)
    推荐谈论高并发柱
    查看文章strncpy()功能更好的文章
  • 原文地址:https://www.cnblogs.com/xiaowie/p/10064442.html
Copyright © 2020-2023  润新知