zoukankan      html  css  js  c++  java
  • 内建对象

    内建对象是指由ECMAScript事先提供的、不依赖于宿主环境的对象,这些对象在程序运行之前就已经存在了。可以直接在程序中任何地方任何时候拿来使用。

    1. 内建全局单例对象   Global、Math、JSON。

            在整个执行环境中只有一个对象实例,这些对象没有内部属性[[Construct]]和[[Call]],所以不能使用new来创建,也不能作为函数来调用,而是直接使用对象名称来引用其属性和方法(对于全局对象,则可以直接使用属性和方法名)。

    1.1  常用内建全局单例对象方法

        Global对象下的内建方法:

    类别 方法 说明
    全局解析方法 eval(x)       解析Javascript字符串 eval中定义的变量不会提升,在严格模式下,外部不能访问eval内定义的变量,不推荐使用
    String解析 parseInt(str,radix) 将字符串解析为整数,可以传入一个进制,会忽略前导空格
      parseFloat(str) 将字符串解析为浮点数,会忽略前导的空格和前导0,会自动识别第一个小数点
    Number判断 isNaN(num) 判断是否不为数字,如果不是则为true,如果是则为false
      isFinite(num) 判断数字范围是否为有限数,即是否在js预定范围内
    URL处理办法

    encodeURI()

    对URI编码,用于整个URI,用特殊的UTF-8编码替换所有无效字符,如冒号,正斜杠,问号,井号等

     

    decodeURI()

    使用ecnodeURI()编码的字符串解码

     

    encodeURIComponent()

    对URI编码,用于URI中的某一段,会对发现的任何非标准字符进行解码

     

    decodeURIComponent()

    对使用ecnodeURIComponent()编码的字符串解码

        Math对象下的内建方法:

    类别 方法 说明
    取整系列 ceil() 向上取整
      round() 四舍五入
      abs() 绝对值
      floor() 向下取整
         
    随机方法 random() 介于0和1之间的随机数,不包括0和1,可封装方法返回指定位数,指定范围的随机数
    最值方法 max[value1,value2..] 返回最大值
      min[value1,value2..] 返回最小值

        JSON对象下的内建方法:

    类别 方法 说明
    解析 parse(text) 把JSON字符串解析为Javascript类型数据
      stringify(obj,[replacer,[space]]) 把Javascript对象序列为JSON字符串,
    默认情况下不包括空格和缩进,所有函数、原型成员以及值为undefined的属性会被忽略

    JSON.stringify()可以接受二个可选参数:

      1、第一个可选参数是个过滤器,可以是一个数组,也可以是一个函数。如果是一个数组,那么结果中只保留这个数组中列出的属性;

                如果是一个函数,这个函数被称为替换函数,接受两个参数:一个键和一个值。替换函数返回undefined时会忽略这个键,否则就将返回值作为这个键的值插入到相应位置。

      2、第二个可选参数是个选项,表示是否在JSON字符串中保留缩进。如果这个参数是数字,表示每个级别缩进的空格数(最大不能超过10,超过10时自动设置为10),如果这个参数是字符串,则将作为缩进字符处理。

      在调用JSON.stringify(obj)时,如果obj中有toJSON()方法并返回一个有效值时,会首先调用这个方法。

    2. 内建对象 

             常见内建对象有以下,都可以直接通过new调用构造函数创建对象实例:

             Object、Function、Array、String、Number、Boolean、Date、RegExp

             Error(EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError)

    2.1  Object和Function之前有详细说明

    2.2 Array和String 内建对象属性和方法比较,有较多相似之处

    对数组中每一项运行执行函数,返回每次调用的结果组成的数组

     

    Array

    String

    长度属性 length length
     

    数组项的个数,可修改长度来添加或移除数组项的功能

    字符串中字符的个数
         
    添加 unshift(new1,new2…)  
      接受任意个参数,并添加到数组前面,返回新数组的长度  
      push(new1,new2…)  
      接受任意个参数,把它们逐个添加到数组末尾,并返回新数组的长度  
         
    删除 shift() trim()
      移除数组第一项并返回,修改数组长度 去掉字符串前后的空格
      pop()  
      移除数组最后一项,修改数组长度,返回被移除的项  
         
    查找 indexOf() / lastIndexOf() indexOf()/lastIndexOf()
     

    从数组中查找指定项,返回所在数组的位置,没有找到返回-1,indexOf()从开头向后查找,lastIndexOf()则从末尾向前查找.
    在比较项是否相等时,会使用全等比较

    第二个可选参数表示从哪个位置开始搜索 ,[可选参数]

    从字符串中查找子字符串,返回子字符串的位置,没有找到返回-1,indexOf()从前往后查找,lastIndexOf()从后往前找

    第二个可选参数表示从哪个位置开始搜索 ,[可选参数]

         
    连接 join() +
      传入一个参数作为分隔符,将数组每一项连接起来,默认为逗号 多个字符串之间连接
      concat() concat()
      创建一个原数组的副本,将传入的参数压入新数组并返 多个字符串之间连接,更多情况是直接使用“+”拼接
         
    截取 slice() slice()
     

    接受1至2个参数,即要返回项的起始和结束位置

    1、只有一个参数时,返回该参数位置开始到末尾的所有项

    2、参数为负数时,加上数组长度使其变为正数

    接受1至2个参数,即要返回项的起始和最后一个字符后面的位置

    1、只有一个参数时,返回该参数位置开始到末尾的所有项

    2、参数为负数时,加上数组长度使其变为正数

      splice() substr()                                      参数:开始位置,字符个数
     

    1、删除:指定2个参数,要删除的第一项的位置和要删除的项数

    2、插入:提供3个参数,起始位置,0,要插入的项

    3、替换:提供3个参数,起始位置,删除的项数,要插入的项 

    substring()            参数:开始位置,最后一个字符后面的位置
         
         
    转换 toLocaleString() toLocaleString() 
      调用数组每一项的toLocaleString(),然后用逗号连接起来 返回对象表示的字符串
      toString() toString()
      调用数组每一项的toString(),然后用逗号连接起来 返回对象表示的字符串
      valueOf() valueOf() 
      返回数组本身,即有array === array.valueOf() 返回对象表示的字符串
        toLowerCase()
        转小写
        toUpperCase() 
        转大写
         
    比较排序 reverse() localeCompare()
      反转数组项的顺序

    对象在参数前返回负数,相等返回0,后面返回正数

      sort()  
      默认按升序排序,可以接受一个比较函数   
         
    字符   charAt() / charCodeAt()
       

    1个参数:基于0的字符位置charAt()返回单字符字符串,charCodeAt()返回字符编码

        fromCharCode()
        将接受到的一或多个字符编码转变为字符串
         
    匹配   match()
        与RegExp的exec()方法相同,接受一个参数,
    要么是一个正则表达式,要么是一个RegExp对象
        search()
        接受一个参数,和match()相同,返回字符串中第一个匹配项的索引,没有找到匹配项时返回-1,
    search()始终从字符串开头向后查找
        replace()
        接受两个参数:一个RegExp对象或字符串和一个字符串或函数,若第一个参数为字符串,则只会替换第一个字符串,若想替换所有子字符串,第一个参数必须为指定了全局标志(g)的正则表达式
        split()
        基于指定的分隔符将一个字符串分割成多个字符串,并将结果放在一个数组中返回,分隔符可以是字符串,也可以是正则表达式。可选的第二个参数用于指定数组的最大长度
         
    迭代 every()  
      对数组中每一项运行执行函数,每一项都返回true时返回true  
      some()  
      对数组中每一项运行执行函数,如果有其中一项执行函数返回true就返回true  
      forEach()  
      对数组中每一项运行执行函数,没有返回值  
      map()  
      对数组中每一项运行执行函数,返回每次调用的结果组成的数组  
      filter()  
      对数组中的每一项运行执行函数,返回执行函数返回true的项组成的数组  

    判断一个对象是否为数组时,在ES5中可以直接使用Array.isArray(obj), 在不支持isArray方法的环境中时,可以使用obj instanceof Array来判断只有一个作用域的情况,

    最佳判断方法是利用Array对象的内部属性[[Class]]来判断:

    function isArray(obj){
      return Object.prototype.toString.call(obj) == '[object Array]';
    }

    关于String的slice()、sbustr()、substring(),如果只传入了第一个参数,则截取从第一个参数至末尾。当传入负参数时:

      1、slice()会将负参数加上字符串长度,使参数为正

      2、substr()会将负的第一个参数加上字符串的长度,将负的第二个参数转换为0

      3、substring()会将所有负参数转换为0,如果第2个参数小于第1个参数,会互换两个参数

    3. 内建包装对象    String、Number和Boolean

           String、Number和Boolean对象是相应简单数据类型的包装对象

           共同的特征:作为构造函数调用时是创建一个对象,作为一般函数调用时则是类型转换。

           由于所有对象相应的Boolean类型值都是true,所以需要特别注意的是new Boolean(false)在布尔运算中会作为true去处理,(永远不要使用Boolean对象)

          

           String、Number和Boolean类型的变量可以直接调用相应包装对象的方法

            实际上在后台会自动转换为相应包装对象,然后调用方法。String和Boolean类型的字面量也可以直接调用包装对象的方法,

            但是Number类型的字面量不能直接调用Number对象的方法。

    console.info(5.toFixed(2));   //异常

    Number对象属性和方法

    属性或方法 名称 说明
    属性 Number.NaN 非数字,但属于number类型
     

    Number.MAX_VALUE

    Number类型能够表示的最大值

     

    Number.MIN_VALUE

    Number类型能够表示的最小值

      Number.NEGAIVE_INFINITY 负无穷
      Number.POSITIVE_INFINITY 正无穷
         
    方法

    valueOf()

    返回对象表示的基本类型的数值

     

    toLocaleString()

    返回对象表示的数值的字符串形式

     

    toString()

    返回对象表示的数值的字符串形式,可以接受一个表示进制的参数

     

    toFixed()

    按照指定的小数位返回数值的字符串表示,如果数值比指定的小数位多,会进行四舍五入处理

     

    toExponential()

    返回以指数表示法表示的数值的字符串形式,接受一个表示小数个数的参数

     

    toPrecision()

    接受一个表示数值的所有数字的位数(不包括指数部分),可能返回固定大小格式,也可能返回指数形式

         

    ECMAScript中toFiexd问题

    在ES中四舍五入的函数 toFixed(n) , n为要保留的小数位数。 n为0~20,当n超过20的时候,JS会出错。

    如果小数点前和要截取的前一位都是0时,将会出现精度问题。而且FF与IE的规则也不同,有些是四舍五入,有些是四舍六入。会根据不同的情况而不同。

    var num = 0.056;
    alert (num.toFixed(1));  //会弹出0.0  或者0.1

    可以试着重写tofixed方法。

    Number.prototype.toFixed=function(len){
                    var add = 0;
                    var s,temp;
                    var s1 = this + "";
                    var start = s1.indexOf(".");
                    if(s1.substr(start+len+1,1)>=5)add=1;
                    var temp = Math.pow(10,len);
                    s = Math.floor(this * temp) + add;
                    return s/temp;
                    }

    这样,0,056就都可以直接转为0.1了。

    4. Date对象

        ECMAScript中的Date对象采用UTC(Coordinated Universal Time,国际协调时间)1970年1月1日午夜(零时)开始经过的毫秒数来保存日期。

    4.1 创建Date对象方法

    方法 说明
    new Date() 构造函数创建对象自动获取当前日期和时间,也可以传入表示日期的毫秒数来创建日期,
    Date.parse() 接受一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数,日期格式和具体的实现及地区有关。如果传入的字符串不能表示日期,返回NaN。
    Date.UTC() 返回表示日期的毫秒数,参数分别是年份、基于0的月份、月中的哪一天(1~31)、小时(0~23)、分钟、秒以及毫秒数,这些参数中,前面两个参数(年月)是必须的,没有提供天数时默认为1,其它参数没有提供时默认为0。
    Date.now() 在ES5中新增,返回表示调用这个方法的日期和时间的毫秒数。这可以用来分析代码执行的时间
    //支持Date.now()时            //不支持Date.now()的情况下
    var start = Date.now();        var start = +new Date();
    //doSomething();            //doSomething();
    var end = Date.now();         var end = +new Date();
    var time = end -start;         var time = end - start;

    获取并转化系统时间

    获取系统时间
    
    var myTime = new Date();
            
    
    var iYear = myTime.getFullYear();
    var iMonth = myTime.getMonth()+1;       //注意月份需要加1,因为系统从0开始计数,实际从1开始计数
    var iDate = myTime.getDate();
    var iWeek = myTime.getDay();
    var iHours = myTime.getHours();
    var iMin = myTime.getMinutes();
    var iSec = myTime.getSeconds();
    var str = '';
            
    if( iWeek === 0 ) iWeek = '星期日';     //也可用swich语句
    if( iWeek === 1 ) iWeek = '星期一';
    if( iWeek === 2 ) iWeek = '星期二';
    if( iWeek === 3 ) iWeek = '星期三';
    if( iWeek === 4 ) iWeek = '星期四';
    if( iWeek === 5 ) iWeek = '星期五';
    if( iWeek === 6 ) iWeek = '星期六';
            
    str = iYear+ '年' +iMonth+'月'+iDate+'日 '+iWeek+' '+ toTwo(iHours)+' : '+ toTwo(iMin)+' : '+ toTwo(iSec);
            
    console.info(str);   //2014年11月4日 星期日 11 : 55 : 00

    5. RegExp对象后面单独提出总结

    6. Error对象

      常见内建错误对象,异常捕获语句中try/catch捕获的错误类型

    错误类型 说明

    Error

    Error是所有错误类型的父类,因此所有错误类型共享了一组相同的属性和方法,这个基类型的主要作用是供开发人员抛出自定义错误

    URIError

    在使用encodeURI()或decodeURI(),URI格式不正确时抛出

    TypeError

    在变量中保存着意外的类型,或者访问不存在的方法时,会导致这种错误

    SyntaxError

    把语法错误的字符串传入eval()时抛出

    ReferenceError

    找不到对象的情况下抛出

    RangeError

    在数值超出范围时抛出,如定义数组时传入负参数就会抛出RangeError

    EvalError

    在使用eval()函数而发生异常时抛出,简单的说,如果没有把eval()当成函数调用,就会抛出错误

  • 相关阅读:
    第1周学习进度
    四则运算题1
    性能监控系统 | 从0到1 搭建Web性能监控系统
    数据库 | Oracle数据库查表空间使用情况
    性能测试 | 系统运行缓慢,CPU 100%,Full GC次数过多问题排查
    Markdown | 语法
    性能测试 | 理解单线程的Redis为何那么快?
    性能测试 | 理解分布式、高并发、多线程
    性能测试 | 常见的性能测试指标
    mysql 中varchar(50)最多能存多少个汉字
  • 原文地址:https://www.cnblogs.com/Peng2014/p/4718372.html
Copyright © 2011-2022 走看看