内建对象

内建对象是指由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()当成函数调用,就会抛出错误

 

posted @ 2015-08-10 16:27  331415706  阅读(598)  评论(0编辑  收藏  举报