引用类型的值(对象)是引用类型的一个实例。ECMAScript提供了很多原生的引用类型(例如Object),以便开发人员用以实现常见的计算任务。
1.Object类型
1)创建Object实例的两种方法:new Object()和对象字面量表示法。一般常用对象字面量标识法:一是因为代码量少,二是对象字面量可以在函数传参时封装可选参数。
2)访问对象属性的两种方法:点表示法和方括号方法。一般用点表示法,方括号方法只有在变量访问属性、属性名中包含特殊字符时使用。
2.Array类型
1)创建Array实例的两种方式:使用Array构造函数和数据对象字面量。
ECMAScript数组的每一项都可以保存任何类型的数据。同数组的大小是动态可变的,即随着数据的添加自动增长。可以通过修改数组的length属性,动态增加或者减小数组的长度。
2)检测数组:instanceof、Array.isArray()(ES5中新增)
3)转换方法:toLocaleString()、toString()、valueOf()方法
4)数组栈方法:push()、pop()
5)数组队列方法:shift()、push()、unshift()
6)数组重新排序方法:reverse()、sort(),有时候通过将比较函数传参给sort()方法实现按数值排序(因为sort()函数默认是按字符串比较排序的,绝大多数的时候需要按数值比较排序)。
7)数组常用操作方法:concat()、slice()、indexOf()、lastIndexOf()
8)数组迭代方法:every()、filter()、forEach()、map()、some()
9)数组归并方法:reduce()、reduceRight()
3.Date类型
1)初始化:Date.parse()和Date.UTC(),不过new Date() 函数会模仿这两个函数的初始化过程,直接生成日期。
4.RegExp 类型
1)正则表达式的构造有两种形式:字面量形式和构造函数形式,两种形式参数略有区别,构造函数形式需要双重转移,同时字面量形式始终会共享同一个RegExp实例,而构造函数形式创建的每个都是一个新实例。ES5中规定每次创建都应创建RegExp新实例。
2)实例属性:global、ignoreCase、lastIndex、multiline、source
3)实例方法:exec()、test()
4)构造函数属性:input、lastMatch、lastParen、leftContext、multiline、rightContext
5.Function 类型(函数是对象,函数名是指针)
1)没有重载
2)函数声明和函数表达式的区别:解析器在向执行环境中加载数据之前,对函数声明和函数表达式并非一视同仁。解析器会通过一个名为函数声明提升的过程率先读取函数声明,并使其在执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析器执行。
3)函数可以做参数,可以做函数返回值。
4)函数内部属性:
callee:函数arguments对象的一个属性,该属性是一个指针,指向拥有这个arguments对象的函数。(在函数内部可以代替函数名调用函数,消除函数使用的耦合性)
caller:函数对象的属性caller,保存着调用当前函数的函数的引用。
·但是在严格模式下arguments.callee会导致错误。
5)函数属性和方法:
length:函数接受的参数个数
apply和call:修改函数运行作用域
bind:创建一个函数实例,其this值会被绑定到bind函数的参数值
toLocaleString和toString:返回函数代码,可以在调试代码时使用。
6.基本包装类型
ES为基本类型Boolean、Number、String 创建了相应的基本包装类型,从而是这几个基本类型可以使用一下操作方法操作这些数据。基本包装类型是特殊的引用类型,但是其生存周期近存在于代码的执行瞬间,由后台自动创建完成相应的处理,一般不会手动使用。
1)Boolean基本包装类型:建议永远不要手动使用
2)Number基本包装类型:toFixed()、toExponential()、toPrecision()
3)String基本包装类型: length、charAt()、charCodeAt()、concat()、slice()、substring()、substr()、indexOf()、lastIndexOf()、trim()、toLowerCase()、toUpperCase()、replace()、split()。
7.单体内置对象
定义:由ES实现提供的,不依赖于宿主环境的对象,这些对象在ES程序执行之前就已经存在了。Object、Array、String、Global、Math
1)Global对象
所有全局作用域中定义的属性和函数,都是Global对象的属性。
encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()、eval()
Web浏览器将这个global全局对象作为window对象的一部分实现的。
2)Math对象
min()、max()、ceil()、floor()、round()