引用类型
引用类型:对象的定义,描述的是一类对象所具有的属性和方法;
对象是某个特定引用类型的实例;
下面介绍下ECMASCript提供的原生引用类型object
Object类型
创建Object实例的方法有两种- new操作符后跟Object构造函数
- 使用对象字面表示法,向函数传递大量可选参数的首选方式;
var person = {}
对象的属性名会自动转换为字符串;
在函数内部,可以使用typeof 操作符来检测每个属性是否存在;
函数传参技巧:对于必须值使用命名参数,使用对象字面量来封装多个可选参数
访问对象属性:person["name"] or person.name
使用方括号时,要将访问的属性以字符串或者变量的形式放入方括号中Array类型
数组:每一项都能保存任何类型的数据,大小可以动态调整;
创建数组的方法:var color = new Array()
new也可以省略;- 字面量表示法:最后一项后面不要跟逗号
使用构造函数创建时,可以向构造函数传递数组中的包含项、数组的长度(数字);包含项有多个,用逗号隔开;如果传递了一个值,数字的话就是指定的长度,其他类型的参数则创建包含那个值的数值
读取和设置数组的值:使用方括号并提供索引,从0开始
如果将数组的length设置为大于项数的值,则新增的每一项都会取得undefined;
利用length属性可以方便的在数组末尾添加新项var co = [1,2,3,3];co[co.length]=4;co[co.length]=5;
- 检测数组
Array.isArray()方法(ie9及以上),确定某个值到底是不是数组,而不管他是在哪个全局执行环境中创建的;instanceof对于单一的全局执行环境没问题,但是如果有多个全局执行环境,就会存在两个版本的Array构造函数。 转换方法
toString():返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串
valueOf():返回的还是数组,
toLocaleString():数组中每一项调用toLoacleString,然后逗号拼接上,默认情况下会以逗号分隔字符串的形式返回数组项,如果使用join()方法,则可以指定分隔符构建字符串(只有一个参数,分隔符的字符串,不传的话默认逗号分隔符)。若数组中的某一项为null或undefined,会返回空字符串
- 栈方法(后进先出方法)
push():可以接收任意数量参数,然后将其逐个添加到数组末尾,并返回修改后的数值长度;pop()方法从数组末尾移除最后一项,减少数组长度,并返回移除项 - 队列方法(先进先出)
shift()移除数组的第一项并返回该项,将数组长度减一;unshift()在数组前端添加任意个项,并返回新数组长度; - 重排序方法
reverse():反转数组项的顺序;但是不够灵活;如果只是想反转数组原来的顺序,使用这个较快;
sort():默认情况下按升序排列数组项(调用每个数组项的toString方法,得到字符串,然后确定如何排序,默认会造成数字5在10的后面,因为比较的是字符串);
sort 方法可以接收一个比较函数作为参数,比较函数接收两个参数,返回结果为正负零; - 操作方法(数值)
concat()方法:不会改变原数组,会返回一个新构建的数组;
slice()方法,基于当前数值的一个或多个项创建一个新数组,可以接收一或两个参数(项的起始和结束位置),只有一个的话结束位置为数组末尾,两个的话返回起始和结束位置的项,但不包括结束位置的项,不会影响原来的数值;如果有负数,则用数组长度加上该数确定相应位置,如果结束小于初始,则返回空数组
splice()方法,向数组中部插入项,
- 删除任意数量的项,要删除的第一项的位置和要删除的项数
- 插入:向指定的位置插入任意项,需提供三个参数:起始位置、0(要删除的项数)和要插入的项,如果要插入多项,可以传入第四、第五以至任意多项
- 替换:参数为:起始位置,要删除的项数和要插入的任意项,插入的项数不必与删除的项数相等
splice 始终会返回一个数组,该数组中包含从原始数值中的删除项(如果删除为0,则返回空数组)
- 位置方法
indexOf()、lastIndexOf()方法,接收两个参数:要查找的项与(可选的)查找的起始位置;
indexOf(从0向后查找);
lastIndexOf(从数值末尾开始向前查找)
返回查找的项在数组中的位置,没有的情况下返回-1;在比较是否相等是用的全等操作符(两个对象,即使字段名、值都一样,全等时也不相等) - 迭代方法
5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响this的值;传入这些方法的函数会接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。
- every 对数组中都每一项运行给定函数,如果每一项都返回true,则返回true
- filter() 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
- forEach()对数组的每一项运行给定函数。没返回值
- map() 对数组的每一项运行给定函数。返回每次函数调用的结果组成的数组
- some() 对数组的每一项运行给定函数。如果该函数对任一项返回true,则返回true
以上方法都不会修改函数中的包含值
- 缩小方法
reduce()、reduceRight(),这两个方法都会迭代数值的所有项,然后构建一个最终返回的值
reduce 从第一项开始,逐个遍历到最后
reduceRight 从最后一项开始,向前遍历
接收参数为:一个每项调用的函数和(可选的)作为缩小基础的初始值
传给reduce和reduceRight 的函数接收4个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项
date类型
创建date对象:构造函数 new Date()
可以根据特定的日期和时间创建日期对象,必须传入该日期的毫秒数,可以通过Date.parse()和Date.UTC(),日期对象在不同浏览器中表现不同,如果1 32,2007
有的会解析成2 1,2007
,但是有的会解析成当前时间- 其中parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应的日期的毫秒数。若传入的字符串不能表示日期,则会返回NaN。实际上如果直接传入字符串给new Date(),也会在后台调用Date.parse();
- Date.UTC() 也会返回表示日期的毫秒数,入参为 年份、月份(0-11)、天数(1-31)、小时(0-23)、分钟、秒、毫秒。其中只有年月是必须的,没有天数则为1,其他没有则为0;
Date()构造函数与Date.UTC()接收参数相同
Date.now()方法,返回调用这个方法时的日期和时间的毫秒,在不支持它的浏览器中,使用+操作符将ate对象转换成字符串,也是一样的效果
- 继承的方法,
与其他引用类型一样,Date类型也重写了toLocaleString(),toString()和valueOf()方法,其中valueOf 返回毫秒数,其他两个返回字符串;Date类型可以使用比较操作符比较(会使用valueOf 转化为毫秒数) - 日期格式化方法
toDateString()—— 以特定于实现的格式显示星期几、月、日和年
toTimeString()—— 以特定于实现的格式显示时、分、秒和时区
toLocaleDateString()—— 以特定于地区的格式显示星期几、月、日和年
toUTCString()—— 以特定于实现的格式完整的utc日期 - 日期、事件组件方法 : 可以看下w3c的date对象方法
- 继承的方法,