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()当成函数调用,就会抛出错误

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/Peng2014/p/4718372.html
Copyright © 2011-2022 走看看