您的位置:首页 > Web前端 > JavaScript

javascript学习——引用类型总结

2016-05-12 16:06 615 查看
  Array类型:数组的每一项可以保存任何类型的数据,大小可以动态调整,即可以随着数据的添加和删除,自动增长和减小。

   创建:1、使用Array构造函数:

var persons1 = new Array(); //创建一个空数组
var persons2 = new Array(3); //创建一个长度为3的数组,分别存放了三个undefined
var persons3 = new Array("xiaoming"); //创建了一个长度为1的数组,内容为字符串“xiaoming”
       其中可以省略new关键字。

               2、使用数组字面量表示法:

var person1 = ["xiaoming", "xiaohong","xiaogang"]; //创建一个长度为3的数组,分别存放三个字符串
var person2 = [];//创建了一个空数组


   Array常用操作:
       检测数组: 使用方法Array.isArray(value): 该方法可以在全局执行环境中使用,也可以在局部执行环境中。而instanceof只能使用在全局执行环境中

       转换方法:

 toLocaleString():创建一个数组值以逗号分隔开的字符串,每次调用每一项的toLocaleString()方法。
toString():创建一个数组值用逗号分隔的字符串,每次调用每一项的toString()方法。
valueOf(): 返回一个数组。
join("divider"): 在调用toString()或者toLocaleString()方法时,可以用divider构建字符串。

      栈方法:FILO

push(value):将value放入数组最后
pop(): 移除数组末尾最后一项,数组长度减1,返回移除的项

      队列方法:FIFO

 push(value):将value放入数组最后
shift():移除数组第一项,数组长度减一,将移除项返回。

     重排序方法:

reverse(): 将数组倒序
sort(): 将数组升序排列,可以接收一个function,作为比较函数compare(value1,value2)。当value1在value2之前时,返回负数,value1和value2相等时返回0,value1在value2之后时返回正数

    操作方法:

 concat():创建一个新数组(并不是复制原数组地址),然后将接收到的参数添加到该副本的末尾。
slice():基于当前数组中的一个或多个项创建一个新数组,可以接受一个或两个参数。若是两个参数,则方法返回起始位置和结束为止之间的项,注意不包括结束为止的项。该方法也不影响原数组。
splice(): 会影响到原数组. 
删除:两个参数,要删除的位置,和删除的项数。
var colors = ["red","green","blue"];
var remove = colors.splice(0,2);
alert(colors);// 返回blue
alert(remove);//返回red,green


2.插入:三个参数,起始位置,0,要添加的项

var colors  = ["red","green","blue"];
var insert = colors.splice(1,0,["yellow","pink"]);
alert(colors);//red ,yellow, pink,green,blue
alert(insert);//空


3.替换:三个参数,起始位置,替换项数,要替换的项

var colors  = ["red","green","blue"];
var replace = colors.splice(1,2,["yellow","pink"]);
alert(colors);//red ,yellow, pink
alert(insert);//green,blue


位置方法:

indexOf():返回参数所在的数组下标
indexOfRight(): 从数组右边开始记,返回参数所在的数组下标

迭代方法:不会改变原数组

every(function(item,index,array){}):若数组每一项都能使function返回true,则返回true
some(function(item,index,array){}):若数组中有某一些项能使function返回true,饭返回true
forEach(function(item,index,array){}):数组的每一项都执行function函数,无返回值
map(function(item,index,array){}):数组中的每一项都执行function函数,并返回包含全部结果的数组
fliter(function(item,index,array){}):数组中的每一项都执行function函数,并返回返回结果为true的项

var numbers = [1,2,3,4,5,4,3,2,1];
var everynumber =  numbers.every(function(item,index,array){return (item > 2);});  //false

var somenumber = numbers.some(function(item,index,array){return( item > 2);}); //true
var fliternumber = numbers.fliter(function(item,index,array){return (item > 2)}); // 3,4,5,4,3
var mapnumber = numbers.map(function(item,index,array){return ( item *2)}); // 2,4,6,8,10,8,6,4,2


Date类型:使用UTC开始经过的毫秒数保存时间

创建:new Date(): 自动获取当前时间
            new Date(Date.parse("日期")):根据日期返回相应日期的毫秒数,但没有规定parse应该支持那种日期格式。
            new Date(Date.UTC(year,month,day,hour,min,sec)); 需要注意的是month是从0开始计算,hour的时间范围是0-23
            
常用方法:
           
var start = Date.now();//获取当前时间,需要浏览器支持EMCAScript
var start =+ new Date();//获取当前时间戳,适用于不支持EMCAScript的浏览器<pre name="code" class="javascript">/*
Date 的valueOf()方法直接返回时间的毫秒值,因此可以用于比较日期的大小
*/
var date1 = new Date(2016,0,14);
var date2 = new Date(2016,4,13);

alert(date1 > date2); // false alert函数会在后台直接调用valueOf()方法。



日期格式化方法:

toDateString(): 以特定格式显示星期几、日月年
toTimeString(): 以特定格式显示时分秒和时区
toLocaleDateString(): 以特定地区的格式显示星期几、日月年——格式和浏览器有关
toLocaleTimeString(): 以特定地区的格式显示时分秒和时区——格式和浏览器有关
toUTCString(): 以特定于实现的格式完整的UTC日期                                    

RegExp类型:支持正则表达式,用于模式匹配

创建: new RegExp("pattern","flag");

             其中:pattern 是要匹配的模式,flag是匹配模式(g:全局模式   i:不区分大小写   m:表示多行)

var patttern1 = new RegExp("[bc]at","g");//匹配以bc开头,at结尾的字符串。
注意:如果模式中有元字符([ ,{, \, ^, $,|,),(,?,*,+,.,]),则需要加转义字符 \

  实例属性:可以获取pattern的各种信息。

global:boolean,是否设置了g
ignoreCase:boolean,是否设置了i
lastIndex:int,表示开始搜索的下一个匹配项的字符位置,从0开始
multiline:boolean,表示是否设置了m
source:pattern的值
var pattern = new RegExp("\\[bc\]at","i");
alert(pattern.global); //false
alert(pattern.ignoreCase);//true
alert(pattern.lastIndex); //0
alert(pattern.mulitiline);//false
alert(pattern.source);// "\[bc\]at"


  实例方法:主要有exec()和text()

  exec():参数为需要应用模式的字符串,然后返回包含第一个匹配项信息的数组,若无克匹配的,返回null,返回值为Array,包含两个属性input(为应用的字符串)和index(匹配项在字符串中的位置)
              在不设置g的时候,在同一个字符串上调用exec(),将始终返回第一个匹配项的信息。

              在设置g的时候,在同一个字符串上调用exec(),会继续查找新匹配项。

  test(): 接收一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false
var text = "000-0000-00";
var pattern =  new RegExp("/\d{3}-\d{4}-\d{2}","g");

if(pattern.test(text)){
alert(true);}


    
Function类型:函数实际上是一个变量,每个函数都是Function类型的一个实例,都具有属性和方法。

声明:
         
function sum(value1,value2){
return value1+value2;
}

var sum = function (value1,value2){ return value1 + value2;} //该方法可以无函数名,因为可以直接通过sum引用该函数

var sum =  new Function("value1","value2","return value1+value2"); //不推荐,因为要2次解析


需要注意的是,js的函数没有重载,如果定义了两个名字一样的函数,则第
c39d
二个函数会覆盖第一个。

函数可以作为值,也可以作为结果。一种常用的应用是从一个函数中返回另一个函数

function createComparisonFunction(propertyName){
return function(object1,object2){
var ob1 = object1[propertyName];
var ob2 = object2[propertyName];

if(ob1> ob2){ return -1;}
else if(ob2 == ob2){return 0;}
else{return 1;}
};
}

var data = [{name:"xiaoming",age:28},{name:"xiaohong",age:24}];
data.sort(createComparisonFunction("name"));
alert(data[0].name); // xiaohong

data.sort(createComparisonFunction("age"));
alert(data[0].age);//24


函数内部属性:argument、this、caller

argument:传入函数的参数,是一个Array,有一个属性是callee,表示拥有这个argument对象的函数。经典用法是解除函数的耦合性。使得函数可以任何的该换名字。
function factorial(num){
if(num == 0) {return 0;}
else{ return num * argument.callee(num-1);}
}

var trueFactorial = factorial;
alert(trueFactorial);// 120


this:函数据以执行的环境变量。在全局环境下是this。
caller: ECMAScript5规定的属性,保存着当前函数的函数引用,如果在全局作用域中调用,返回null。
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
outer(); //返回outer的函数体


函数属性和方法:
属性:length、prototype。
            length:表示希望接收命名参数的个数。
            prototype:之后祥写。prototype是不可枚举的、不可使用for-in枚举。
方法:apply(),call().作用一样,只不过接收的参数不一样。方法都是在特定作用域中调用函数,实际上就是设置this的值。

apply(): 接收作用域和参数数组
call(): 接收作用域、枚举全部的参数    
function sum(num1,num2){ return num1+num2;}

function callSum1(num1,num2){return sum.apply(this, arguments);}

function callSum2(num1,num2){
return sum.call(this,num1,num2);}

alert(callSum1(10,10));// 20
alert(callSum2(10,10));//20

最典型的应用是扩充函数的作用域
window.color = "red";
var  = {color: "yellow"};

function sayColor(){
alert(this.color);}

sayColor();// red
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//yellow

bind() :创建另一个函数实例,并且把环境绑定到该函数上
window.color = "red";
var  = {color: "yellow"};

function sayColor(){
alert(this.color);}

var sayColor2 = sayColor.bind(o);
sayColor2(); //yellow


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: