五、引用类型Ⅰ(Object、Array、Date三种类型)
2014-02-26 17:00
260 查看
『Week NO.2』
由于本章内容篇幅较长故拆分成引用类型Ⅰ和 引用类型Ⅱ两部分。
引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,将数据和功能组织在一起。引用类型有时也称对象定义,因为它们描述的是一类对象所具有的属性和方法。
对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建的,构造函数本身就是一个函数。
5.1 object类型
大多数引用类型都是object类型的实例,object类型也是使用最多的一个类型。
创建object实例的方式有两种:
a. 使用new操作符后跟object构造函数
b. 使用对象字面量表示法。 (代码量少 ,封装数据感觉 ,推荐首选)
c.(不推荐)
一般来说 访问对象属性时使用都是点表示法,在js也可以使用方括号表示法来访问对象的属性。除非使用变量来访问属性,否则建议点表示法。
方括号表示法优点:可通过变量访问属性 :
如:person["first name"] = "meiyzeng"
由于“first name”中包含一个空格,所以不能用点访问,而属性中是可以包含非字母非数字的。
5.2 Array类型
js里数组可以保存任何类型的数据,也可动态调整大小。
创建数组的两种基本方式
a. 使用Array()构造函数 :var colors = new Array(3); //创建一个包含3项的数组
在使用Array构造函数也可以省略new操作符
b.使用数组字面量表示法 由一对包含数组项的方括号表示,数组项用逗号间隔 :var colors = ["red","blue"]
在读取和设置数组时,使用方括号并提供相应值基于0的数字索引
5.2.1检测数组
单一的全局执行环境中使用instanceof操作符检测:如下:
解决方法Array.isArray() (存在低版本浏览器不兼容问题)
5.2.2 转换方法
valueOf的优先级本来就比toString的高。
在默认情况会以逗号分隔字符串返回数组项,使用join()方法可以使用不同的分隔符来构建
5.2.3 栈方法
栈(后进先出)是一种可以限制插入和删除项的数据结构。其插入移除只发生在栈的顶部
push()和pop()是数组默认方法。
-------------------------------------------
这里要注意一点比如push()方法返回的是一个长度值 如下:
栈方法可以与其他数值方法连用。
5.2.4 队列方法
队列(先进先出)在列表末端添加项,从前端移除。push()是项末端添加,而shift()方法能够将第一项移除。
结合push()和shift()方法,可以像队列一样使用数值
unshift()方法则可以从前端添加任意个项并返回新数组长度(ie7中返回undefined而不是数组新长度)
5.2.5 重排序方法
数组中存在两个可以直接用来重排序的方法:reverse()和sort()
reverse()方法会反序数组 如:
sort()默认按升序排列,会调用每个数组项的toSring()转型方法 如:
于是有了比较函数:(下面的是升序,降序同理可得)
(对于数值类型或者valuesOf()方法返回数值类型的对象类型可以使用下面简单的方法比较)
如果想要升级排序 则return语句应该返回 val1-val2 (此处书本有误)
5.2.6 操作方法
concat()方法新构建一个数组
slice()方法(不会影响原始数组),可以接受一个或两个参数,即返回项的起始和结束位置。
a. 一个参数情况下 返回该参数指定位置开始到数组末尾的所有项。
b. 两个参数情况下则返回起始和结束位置之间的项(不包括结束位置的项)
*如果slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置。
如在一个包含5项的数组slice(-3,-1)和slice(2,4)是等同的。如果结束位置小于起始位置,则返回空数组。
splice()方法
主要用途向数组中的中部插入项
删除:(2个参数)可以删除任意数量的项,指定两个参数,要删除第一项的位置和要删除的项数
如:splice(0,3)会删除数组中前三项
插入:(3个参数)起始位置、0(要删除的项数)和要插入的项数
如:splice(3,0,"1","2") //位置3开始插入字符串"1","2"
替换:(3个参数)起始位置,要删除的项数和要插入的项数
如:splice(3,1,"1","2") //删除当前数组2的项然后再插入
5.2.7 位置方法
两个方法:indexOf()和lastIndexOf(),两个方法都接受两个参数:要查找的项和(可选的)表示查找起点位置的索引。
其中indexOf()从开头开始查找,而lastIndexOf()从数组末尾开始查找。返回位置,没找到则返回-1;查找过程使用全等操作符,必须严格相等。
5.2.8 迭代方法
5种迭代方法,每个接收两个参数:要子每一项上运行的函数和(可选的)运行改函数的作用域对象--影响this的值。
every(): 对数组中每项运行给定函数,如果该函数对每一项都返回true,则返回true。
filter(): 对数组中每项运行给定函数,返回函数会返回true的项组成的数组 //对于查询符合条件的所有数组非常有用
forEach(): 对数组中每项运行给定函数,该方法无返回值
map(): 对数组中每项运行给定函数,返回每次函数调用的结果组成的数组。
some(): 对数组中每项运行给定函数,任意一项返回true,则返回true;
5.2.9 缩小方法
reduce()和reduceRight()两个方法都会迭代数组的所有项,然后构建一个最终返回的值。reduce()从头开始,reduceRight()则从末端开始。
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为缩小基础的初始值
reduce()和reduceRight()的函数接收4个参数 (前一个值、当前值、项的索引和数组对象)如:
使用reduce()方法可以执行求数组中所有值之和的操作
5.3 Date类型
Date类型保存的日期能够精确到1970年1月1日之前或之后285616年
创建日期对象:
在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数。为了简化这一计算过程,JavaScript提供了两个方法:Date.parse()和Date.UTC()。
其中,Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。JavaScript没有定义Date.parse()应该支持哪种格式,因此这个方法的行为因实现而异,而且通常是因地区而异。将地区设置为美国的浏览器通常都接受下列日期格式:
Date类型还有一些专门用于将日期格式化为字符串的方法,这些方法如下:
toDateString()——以特定于实现的格式显示星期几、月、日和年
toTimeString()——以特定于实现的格式显示时、分、秒和时区
toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年
toLocaleTimeString()——以特定于实现的格式显示时、分、秒
toUTCString()——以特定于实现的格式完整的UTC日期
由于本章内容篇幅较长故拆分成引用类型Ⅰ和 引用类型Ⅱ两部分。
引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,将数据和功能组织在一起。引用类型有时也称对象定义,因为它们描述的是一类对象所具有的属性和方法。
对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建的,构造函数本身就是一个函数。
var person = new Object();这行代码创建Object引用类型的一个新实例,然后把实例保存在person中。
5.1 object类型
大多数引用类型都是object类型的实例,object类型也是使用最多的一个类型。
创建object实例的方式有两种:
a. 使用new操作符后跟object构造函数
var person = new Object(); person.name = "meiyzeng"; person.age = 26
b. 使用对象字面量表示法。 (代码量少 ,封装数据感觉 ,推荐首选)
var person = { name : "meiyzeng", age : 26 //数值属性会自动转化成字符串 }
c.(不推荐)
var person = {} person.name = "meiyzeng"; person.age = 26
一般来说 访问对象属性时使用都是点表示法,在js也可以使用方括号表示法来访问对象的属性。除非使用变量来访问属性,否则建议点表示法。
person.name //点表示法 person["name"] //方括号表示法
方括号表示法优点:可通过变量访问属性 :
如:person["first name"] = "meiyzeng"
由于“first name”中包含一个空格,所以不能用点访问,而属性中是可以包含非字母非数字的。
5.2 Array类型
js里数组可以保存任何类型的数据,也可动态调整大小。
创建数组的两种基本方式
a. 使用Array()构造函数 :var colors = new Array(3); //创建一个包含3项的数组
在使用Array构造函数也可以省略new操作符
b.使用数组字面量表示法 由一对包含数组项的方括号表示,数组项用逗号间隔 :var colors = ["red","blue"]
在读取和设置数组时,使用方括号并提供相应值基于0的数字索引
var colors = ["a","b","c"]; colors[5] = "f"; alert(colors.length) //6 console.log(colors) //["a", "b", "c", undefined, undefined, "f"] colors.length = 3; alert(color[2]) // undefined
5.2.1检测数组
单一的全局执行环境中使用instanceof操作符检测:如下:
if (value instanceof Array){ // }
解决方法Array.isArray() (存在低版本浏览器不兼容问题)
if(Array.isArray(value)){ // }
5.2.2 转换方法
var colors = ["a","b","c"]; alert(colors) //由于alert()要接收字符串参数,所以会在后台调用toString()方法
valueOf的优先级本来就比toString的高。
在默认情况会以逗号分隔字符串返回数组项,使用join()方法可以使用不同的分隔符来构建
var colors = ["a","b","c"]; alert(color.join("||")) // a || b || c alert(color.join("")) //a,b,c (ie7及更早版本会使用undefined作为分隔符)
5.2.3 栈方法
栈(后进先出)是一种可以限制插入和删除项的数据结构。其插入移除只发生在栈的顶部
push()和pop()是数组默认方法。
var colors = new Array(); var count = colors.push("red","green") alert(count) //2 count = colors.push("black"); alert(count) //3 var item = colors.pop(); //取得最后一项 alert(item); //black alert(color.length) //2
-------------------------------------------
这里要注意一点比如push()方法返回的是一个长度值 如下:
var colors = new Array(); var count = colors.push("red","green") console.log(colors) //["red", "green"] console.log(count) //2 alert(count);-------------------------------------------
栈方法可以与其他数值方法连用。
5.2.4 队列方法
队列(先进先出)在列表末端添加项,从前端移除。push()是项末端添加,而shift()方法能够将第一项移除。
结合push()和shift()方法,可以像队列一样使用数值
var colors = new Array(); var count = colors.push("red","green") alert(count) //2 count = colors.push("black"); alert(count) //3 var item = colors.shift(); //取得第一项 alert(item); //"red" alert(color.length) //2
unshift()方法则可以从前端添加任意个项并返回新数组长度(ie7中返回undefined而不是数组新长度)
5.2.5 重排序方法
数组中存在两个可以直接用来重排序的方法:reverse()和sort()
reverse()方法会反序数组 如:
var values = [1,2,3,4,5] values.reverse(); alert(values); // 5,4,3,2,1
sort()默认按升序排列,会调用每个数组项的toSring()转型方法 如:
var values = [0,1,5,20,25,3] values.sort(); alert(values); // 0,1,20,25,3,5
于是有了比较函数:(下面的是升序,降序同理可得)
function compare(varl,val2){ if(val1 < val2){ return -1; }else if (val1 > val2){ return 1; }else{ return 0; } }
var values = [0,1,5,20,25,3] values.sort(compare); alert(values); // 0,1,3,5,20,25
(对于数值类型或者valuesOf()方法返回数值类型的对象类型可以使用下面简单的方法比较)
function compare(val1,val2){ return val2 - val1; //降序 }
如果想要升级排序 则return语句应该返回 val1-val2 (此处书本有误)
5.2.6 操作方法
concat()方法新构建一个数组
var c1 = ["1","2","3"] var c2 = c1.concat("num","num1") alert(c2) // 1,2,3,num,num1
slice()方法(不会影响原始数组),可以接受一个或两个参数,即返回项的起始和结束位置。
a. 一个参数情况下 返回该参数指定位置开始到数组末尾的所有项。
b. 两个参数情况下则返回起始和结束位置之间的项(不包括结束位置的项)
var c1 = ["1","2","3","4"] var c2 = c1.slice(1); // 2,3,4 var c3 = c1.slice(1,3); // 2,3 不包括位置3的值4
*如果slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置。
如在一个包含5项的数组slice(-3,-1)和slice(2,4)是等同的。如果结束位置小于起始位置,则返回空数组。
splice()方法
主要用途向数组中的中部插入项
删除:(2个参数)可以删除任意数量的项,指定两个参数,要删除第一项的位置和要删除的项数
如:splice(0,3)会删除数组中前三项
插入:(3个参数)起始位置、0(要删除的项数)和要插入的项数
如:splice(3,0,"1","2") //位置3开始插入字符串"1","2"
替换:(3个参数)起始位置,要删除的项数和要插入的项数
如:splice(3,1,"1","2") //删除当前数组2的项然后再插入
5.2.7 位置方法
两个方法:indexOf()和lastIndexOf(),两个方法都接受两个参数:要查找的项和(可选的)表示查找起点位置的索引。
其中indexOf()从开头开始查找,而lastIndexOf()从数组末尾开始查找。返回位置,没找到则返回-1;查找过程使用全等操作符,必须严格相等。
5.2.8 迭代方法
5种迭代方法,每个接收两个参数:要子每一项上运行的函数和(可选的)运行改函数的作用域对象--影响this的值。
every(): 对数组中每项运行给定函数,如果该函数对每一项都返回true,则返回true。
filter(): 对数组中每项运行给定函数,返回函数会返回true的项组成的数组 //对于查询符合条件的所有数组非常有用
forEach(): 对数组中每项运行给定函数,该方法无返回值
map(): 对数组中每项运行给定函数,返回每次函数调用的结果组成的数组。
some(): 对数组中每项运行给定函数,任意一项返回true,则返回true;
5.2.9 缩小方法
reduce()和reduceRight()两个方法都会迭代数组的所有项,然后构建一个最终返回的值。reduce()从头开始,reduceRight()则从末端开始。
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为缩小基础的初始值
reduce()和reduceRight()的函数接收4个参数 (前一个值、当前值、项的索引和数组对象)如:
使用reduce()方法可以执行求数组中所有值之和的操作
var val = [1,2,3,4,5] var sum = val.reduce(function(prev,cur,index,array){ return prev + cur; }) alert(sum); // 15
5.3 Date类型
Date类型保存的日期能够精确到1970年1月1日之前或之后285616年
创建日期对象:
var now = new Date();
在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数。为了简化这一计算过程,JavaScript提供了两个方法:Date.parse()和Date.UTC()。
其中,Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。JavaScript没有定义Date.parse()应该支持哪种格式,因此这个方法的行为因实现而异,而且通常是因地区而异。将地区设置为美国的浏览器通常都接受下列日期格式:
Date类型还有一些专门用于将日期格式化为字符串的方法,这些方法如下:
toDateString()——以特定于实现的格式显示星期几、月、日和年
toTimeString()——以特定于实现的格式显示时、分、秒和时区
toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年
toLocaleTimeString()——以特定于实现的格式显示时、分、秒
toUTCString()——以特定于实现的格式完整的UTC日期
相关文章推荐
- dos 日期时间格式设置使用小结(Date和Time)
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- DOS批处理之DATE命令的使用方法详解
- c# 所有类型都从Object类型派生
- 如何解决ORA-01843与NLS_DATE_FORMAT问题
- ExtJs的Date格式字符代码
- 深入解析C++中的引用类型
- C# Dynamic关键字之:解析dynamic就是Object
- C#值类型和引用类型的深入理解
- PHP中Date获取时间不正确怎么办
- 什么是DAO Database Access Object
- c# 引用类型和值类型
- Insert Date and Time into Access
- 值类型和引用类型的区别深入理解
- mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
- JavaScript Array扩展实现代码
- C#中Array与ArrayList用法及转换的方法
- Array栈方法和队列方法的特点说明
- Array.prototype.slice 使用扩展
- js中的值类型和引用类型小结 文字说明与实例