引用类型
5.1 Object类型
-
创建方式
-
new操作符 后跟Object构造函数
var apple = new Object(); apple.amount = 12; apple.color = 'red';
-
对象字面量表示法------>简化了创建包含大量属性的对象的过程
var apple = { amount:12, color:'red' }
注:使用对象字面量定义对象时,实际上不会调用Object构造函数
-
-
对象属性的访问
-
点表示法访问对象属性
console.log(apple.amount)
-
使用方括号表示法访问对象属性
console.log(apple['amount'])
注:只有方括号表示法,可以通过变量来访问属性
var blname = 'amount'; console.log(apple[blname]);//打印出 12
-
5.2 Array 类型
-
JavaScript语言中array的特殊性:
- ECMAScript数组的每一项可以保存任何类型的数据。也就是说,可以用数组的第一个位置来保存字符串,用第二位置来保存数值,用第三个位置来保存对象
- ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据
-
创建方式(与对象创建方式基本相同)
-
检测数组(判断某个对象是不是数组)
-
使用instance of
if(value instance of Array) { //执行对数组的操作 }
注:使用instance of 的问题:
- instance of 假定只有一个全局执行环境,如果网页中包含多个框架(例如网页中嵌套了iframe页面)则就有两个以上的全局执行环境,那么就存在多个Array构造函数。
- 当从一个框架向另一个框架传入一个数组时,传入的数组与第二个框架中原生创建的数组分别具有不同的构造函数,就会判断失误
-
Array.isArray()方法:此方法最终确定某个值是不是数组,与它在哪个全局执行环境中创建的无关
if(Array.isArray(value)) { //执行对数组的操作 }
-
-
转换方法
所有的对象都具有toLocaleString()、toString()和valueOf()。
- 调用valueOf(),返回数组本身
- 调用toString(),返回由数组元素和逗号拼接而成的字符串
- 而join(),可以通过任意分隔符将数组转化成字符串
-
栈方法
- 栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部
- 数组中提供了push()和pop()方法,实现类似栈的行为
- push()方法,可接收任意数量的参数,并将其逐个添加到数组末尾,**返回的是修改后的数组的长度 **
- pop()方法,从数组末尾移除最后一项,返回的是移除的项
-
队列方法
- 队列数据结构的访问规则是FIFO(First-In-First-Out,先进先出)。队列在列表的末端添加项,从列表的前端移除项
- shift()方法,移除数组中的第一项,返回的是移除的项
- unshift()方法,在数组头部添加任意个元素,返回的是修改后的数组长度
-
重排序方法
sort()方法,默认按照升序排列数组项。
-
原理:sort()方法调用每个数组项的toString()转型方法,比较得到字符串,然后确定给如何排序,即使数组中每一项都是数值,sort()方法比较的也是字符串,因此这种排序方式并不是最佳方案
-
sort()方法可接收另一个比较函数作为参数,该函数接收两个参数,a和b。
-
如果 a < b,则返回一个负数
-
如果 a = b,则返回 0
-
如果 a > b,则返回一个正数
-
//升序排序 function compare(a,b) { if(a < b) { return -1 } else if(a > b) { return 1 } else { return 0 } } var sortArr = [3,2,5,1,4]; sortArr.sort(compare); console.log(sortArr);//打印出 1,2,3,4,5
-
-
-
操作方法
-
contact()方法,原理:创建当前数组的副本,然后将接收到的参数添加到这个副本的末尾,返回新构建的数组
- 传入空时,contact复制数组并返回副本
- 传入多个数组时,会将这些数组的每一项添加到结果数组中
-
slice()方法,能基于当前数组中的一个或者多个创建一个新数组。
-
接收1~2个参数,即要返回项的起始和结束位置
-
只有一个参数时,返回从指定位置开始到数组末尾所有的项
-
该方法不会影响原始数组
-
当参数中有负数时,该参数会转变成“数组长度 + 负参数”
var arr = [1,2,3,4,5] //arr.slice(-2,-4)的结果与arr.slice(3,1)的结果相同
-
-
splice()方法,主要用途是向数组的中部插入项
- 操作1,删除。需传入两个参数,起始和结束位置
- 操作2,插入。需传入三个参数,分别是“起始位置”,“删除的项数”,“要插入的项”
- 操作3,替换。同操作2
- 该方法始终都会返回一个操作后的新数组
-
-
位置方法
indexOf和lastIndexOf():两个方法找到后会返回位置索引,找不到则返回‘-1’,只不过一个是从头部开始找,一个是从尾部开始找
-
迭代方法
- every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true,否则返回false
- filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
- forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
- map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
- some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true,否则返回false
- 以上方法均不会改变原始数组
-
归并方法
reduce()和reduceRight()
- 两个方法都会迭代数组所有项,然后构建一个最终返回的值。第一个方法从数组第一项开始,第二个方法从数组最后一项开始
- 接收4个参数,前一个值、当前值、项的索引和数组对象。
5.3和5.4 略
个人认为Date对象和正则表达式的相关使用,需要大家在实际工作中熟练,总结。并且在一些网站上已经有了日期对象的灵活使用,这一部分我们的重点是积累