5. 引用类型学习笔记

来源:互联网 发布:北通 手柄 知乎 编辑:程序博客网 时间:2024/04/30 15:38

1.基础类型和引用类型区别
ECMAScript5包含两个不同类型的值:基本类型值和引用类型值。

基本类型:Undifined、Null、Boolean、Number和String。
可以直接操作保存在变量中的实际值。
这里写图片描述

引用类型:Object、Array、Date、RegExp、Function、基本包装类型、单体内置对象。
保存在堆内存中的对象,与其它语言不同的是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能通过操作对象的在栈内存中的引用地址。所以引用类型的数据,在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存在堆内存中的对象。
这里写图片描述

2.Object类型
①创建方式:
a.new Object(); new 后面加上Object的构造函数。
b.对象字面量表示法。
②属性:person.name 或 person[“name”]
[ ]方式优点:a.可以通过变量访问,如var a = “name”; person[a];
b.尤其是在属性名可能存在语法错误或者有关键字、空格等,可以直接用[],如person[“first name”];
一般使用. 的方式访问。

3.Array 类型
①创建方式:
a. new Array()

    var arr = new Array();    var arr = new Array(3);    var arr = new Array("a","b"); 

b. Array()

    var arr = Array();    var arr = Array(3);    var arr = Array("a","b");

c. []

    var arr = [];    var arr = ["a","b"]; 

**特殊小例:
var date = new Date(‘January 32, 2017’);
在IE上,输出Wed Feb 01 2017 00:00:00 GMT+0800
在Chrome、Opera、Safari上,输出Invalid Date
在Firefox上,输出这里写图片描述
②常用方法
var value = [1,2];
a. Array.isArray(value);//判断value是否是数组类型
b. value.toString()返回字符串,value.valueOf()返回数组。
这里写图片描述
toLocaleString()返回本地字符串:
这里写图片描述
c. value.join(“||”);//输出”1||2”
d. 栈方法(Last-In-First-Out 后进先出)
push(): 可接收任意数量的参数,在数组尾部逐个添加,并返回修改后的数组新长度。
pop(): 从末尾移除最后一项,减少数组长度length,并返回移除的项。
这里写图片描述
e. 队列方法(First-in-First-Out 先进先出)
shift():从数组移除第一项,减少数组长度length,并返回移除的项。
unshift():添加数组第一项,增加数组长度length,并返回修改后的数组新长度。
这里写图片描述

这里写图片描述
f.排序方法
reverse():逆序排序。
arrayObject.sort(sortby):sortby 可选。规定排序顺序。必须是函数。(原理是带分区的快速排序)。

function compare(v1,v2){    return v2-v1;}function compareAsc(v1,v2){    return v1-v2;}var arr = [5,2,3,1,10,12,4];arr.sort();arr.sort(compare);arr.sort(compareAsc);

这里写图片描述

g.操作方法
concat():连接两个或多个数组,不会改变现有数组。

var str = "str";str.concat("ing");var arr = ["arr"];arr.concat("ay",["&","string"]);

这里写图片描述
slice(start,end):从已有的数组中返回选定的元素数组,不会改变现有数组。

var arr = ['a','b','c'];arr.slice(1);arr.slice(1,2);arr.slice(-2,-1);arr.slice(2,1);

splice(index,howmany,item1,…..,itemX):从数组中添加/删除项目,然后返回被删除的项目,会改变现有数组。

var arr = ['a','b','c'];arr.splice(1,1);arr.splice(1,0,'d','e');

这里写图片描述
h.位置方法
indexOf(); 返回某个指定的字符串值在字符串中首次出现的位置。
lastIndexOf(); 返回一个指定的字符串值最后出现的位置。

var arr = ['a','b','c','c','d'];arr.indexOf('c');arr.lastIndexOf('c');

这里写图片描述

这里写图片描述
i. 迭代方法
every(): 对数组每一项运行给定的函数,如果每一项都为true,则返回true。
some(): 一项为true则返回true。
filter(): 返回true组成的数组。
map(): 返回调用结果组成的数组。
forEach(): 循环,无返回值。

    var num = [1,2,3,4];    var everyResult = num.every(function(item,index,array){        return item>2;    });    console.log('everyResult:'+everyResult);    var someResult = num.some(function(item,index,array){        return item>2;    });    console.log('someResult:'+someResult);    var filterResult = num.filter(function(item,index,array){        return item>2;    });    console.log('filterResult:'+filterResult);    var mapResult = num.map(function(item,index,array){        return item*2;    });    console.log('mapResult:'+mapResult);    num.forEach(function(item,index,array){        console.log('item:'+item+'; index:'+index+'; array:'+array);    });

这里写图片描述
j. 缩小方法
reduce(): 这个函数的任何值都会作为第一个参数自动传给下一项。
例:用reduce() 求出数组中所有值之和。

    var num = [1,2,3,4];    var sum = num.reduce(function(prev,cur,index,array){        console.log('prev:'+prev+'; cur:'+cur);        console.log('return:'+(prev+cur));        return prev+cur;    });    console.log('sum:'+sum);

这里写图片描述
reduceRight(): 从数组最后一项开始,遍历到第一项。

4.Date类型
Date.parse(cur): 指定的日期和时间据 1970/1/1 午夜(GMT 时间)之间的毫秒数。
日期格式化方法:
这里写图片描述
常用获取时间的方法:
getTime(),valueOf(): 获取日期毫秒数;
getFullYear(): 获取4位数年份;
getMonth(): 获取月份;
getDate(): 获取月份中的天数;
getDay(): 获取星期几;
getHours(): 获取小时数;
getMinutes(): 获取分钟数;
getSeconds(): 获取秒数;

5.RegExp类型
*实例属性:*global, ignoreCase, lastIndex, multiline, source。
实例方法:
a.exec()

    var text = "cat bat sat fat";    var pattern = /.at/gi;    var mattch = pattern.exec(text);    console.log(mattch);    //lastIndex 下一个匹配项字符的位置    console.log('lastIndex:'+pattern.lastIndex);    var mattch1 = pattern.exec(text);    console.log(mattch1);    console.log('lastIndex:'+pattern.lastIndex);    var text = "mom and dad and boby";    var pattern = /mom( and dad( and boby)?)?/gi;    var mattch = pattern.exec(text);    console.log(mattch);

这里写图片描述

test(): 返回是否匹配的布尔值。

    var text = "mom and dad and boby";    var pattern = /mom( and dad( and boby)?)?/;    console.log('testResult-1:'+ (pattern.test(text)));    console.log('patternLastIndex-1:'+pattern.lastIndex);    console.log('testResult-2:'+ (pattern.test(text)));    console.log('patternLastIndex-2:'+pattern.lastIndex);    //g 会循环遍历    var GPattern = /mom( and dad( and boby)?)?/g;    console.log('GtestResult-1:'+ (GPattern.test(text)));    console.log('GPatternLastIndex-1:'+GPattern.lastIndex);    console.log('GtestResult-1:'+ (GPattern.test(text)));    console.log('GPatternLastIndex:'+GPattern.lastIndex);

这里写图片描述
局限性:
这里写图片描述

6.Function类型
每个函数都是function类型的实例。函数是对象,因此函数名实际也是指向函数对象的指针,不会与某个函数绑定。
函数是对象,函数名是指针。
没有重载。
a. 创建方式:
a1. 函数声明
解析器会率先读取函数声明,而函数表达式是在执行到对应行时再执行。

function sum(a, b){    return a+b;}

a2. 函数表达式

var sum = function(a, b){    return a+b;}

b. 函数内部属性
arguments : 保存函数参数。
arguments.callee : 指针,指向这个arguments对象的函数。(常用于阶乘递归调用,在严格模式下报错)
this : 当网页全局调用时,this对象引用就是window对象。
caller : 保存当前函数的引用。若在全局作用域中调用,则返回null。

function outer(){    inner();}function inner(){    console.log("arguments.callee:");    console.log(arguments.callee.caller);    console.log("arguments.callee.caller:");    console.log(arguments.callee.caller);}//调用outer();

这里写图片描述

参考资料:
http://www.jb51.net/article/65911.htm
《JavaScript高级程序设计》
http://www.codesec.net/view/164723.html

0 0