引用类型是一种数据结构,用于将数据和功能组织在一起。
Object类型
创建Object实例的方式有两种。第一种是使用new操作符后跟Object构造函数。另一种方式是对象字面量表示。
访问对象属性时可以使用点表示法或者方括号,方括号时属性以字符串形式放在括号内。主要优点是可以通过变量来访问属性。
Array类型
- 数组的length属性可以从数组的末尾移除项或向数组中添加新项。
- 检测某个值是否是数组 Array.isArray()
- 调用数组的toString()方法,会返回由数组中每个值得字符串形式拼接而成的一个由逗号分隔的字符串。
- 使用join()方法,可以使用不同的分隔符来构建这个字符串。
- 如果数组中的某一项是null或undefined,那么该值会返回的结果中以空字符串表示。
- 数组中有两个直接用来重排序的方法:reverse()和sort()。reverse会反转数组,sort默认会按升序排列,sort方法比较的是字符串,即使数组中的每一项都是数字,sort方法会调用每个数组项的toString方法。
- concat方法可以基于当前数组中的所有项创建一个新数组。
var colors = ['red', 'green']; var colors2 = colors.concat('yellow', ['balck', 'blue']) colors2 // ['red', 'green', 'yellow', 'balck', 'blue']
slice方法可以基于当前数组中的一或多个创建一个新数组。接收两个参数,分别是开始和结束的位置。不影响原数组。
var colors = ['red', 'green', 'yellow', 'balck', 'blue']; var colors2 = colors.slice(1); // ['green', 'yellow', 'balck', 'blue'] var colors3 = colors.slice(1,3); // ['green', 'yellow']
splice方法
- 可以删除任意数量的项,两个参数,第一项的位置和要删除的项数;splice(0,2)
- 可以向指定位置插入任意数量的项,三个参数,起始位置,0(要删除的项数),要插入的项;splice(2,0,'red','green')从位置2开始插入两项
- 可以向指定位置插入任意数量的项,且同时删除任意数量的项;splice(2,1,'red','green')从数组位置2的项开始删除1项,然后插入两项。
- splice始终返回一个数组,包含从原始数组数组中删除的项。
两个位置方法:indexOf和lastIndexOf;接收两个参数:要查找的项和表示查找起点位置的索引。indexOf从数组的开头开始向后查找,lastIndexOf则相反。都返回要查找项在数组中的位置,没找到返回-1。使用的是全等操作。
- 数组的迭代方法
- every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
- filter():对数组中的每一项运行给定函数,返回函数会返回true的项组成的数组
- forEach():对数组中的每一项运行给定函数,没有返回项
- map():返回每次函数调用的结果组成的数组
- some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
var num = [1,2,3,4,5,6,7,8,9]; var everyNum = num.every(function(item, index, array){ return (item>2) // false }) var someNum = num.some(function(item, index, array){ return (item>2) // true }) var filterNum = num.filter(function(item,index,array){ return (item>2) // [3,4,5,6,7,8,9] }) var mapNUm = num.map(function(item,index,array){ return (item*2) // [6,8,10,12,14,16,18] })
- 归并方法
- reduce()
- reduceRight()
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){ return prev + cur; }) consle.log(sum); // 15
第一次执行回调函数,prev是1,cur是2。第二次,prev是3(1加2的结果),cur是3。这个过程会持续把数组中的每一项访问一遍,最后返回结果。reduceRight作用类似,只是方向相反。
RegExp类型
- 正则表达式的3个标志
- g 全局模式
- i 不区分大小写
- m 表示多行模式
function类型
- 每个函数都是Function类型的实例,由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
- 函数声明与函数表达式
- 解析器在向执行环境加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码前可用;函数表达式则必须等解析器执行到它所在的代码行,才会真正被解释执行。
alert(sum(10,10)); function sum(num1,num2){ return num1+num2; } // 下面这种函数表达式写法会报错 var sum = function(num1, num2){ return num1+num2 }
- 作为值得函数
- 函数名本身就是变量,所以函数也可以作为值来使用。
- 函数内部属性
- arguments
- 主要用途:保存参数
- 有callee属性,指向拥有这个arguments对象的函数。
- arguments
function fac(num){ if(num<=1){ return 1; } else { return num * fac(num-1) } } // 上面的写法函数的执行与函数名紧紧耦合在一起 function facNew(num){ if(num<=1){ return 1; } else { return num * arguments.callee(num-1); } }
-
- this this引用的是函数执行的环境对象。
- 函数属性和方法
- length 表示函数希望接收的命名参数的个数
- prototype
- 对于引用类型,prototype是保存他们所有实例方法的真正所在
- prototype属性时不可枚举的
- apply() 在特定的作用域中调用函数(改变函数的执行环境)
- 两个参数:运行函数的作用域;参数数组
- call() 在特定的作用域中调用函数(改变函数的执行环境)
- 第一个参数是this,其余参数需要逐个列举出来
window.color = 'red'; var o = {color: 'blue'}; function sayColor() { alert(this.color) } sayColor(); // red sayColor.call(this); // red sayColor.call(o); // blue this指向o
- bind() 创建一个函数的实例,this值会被绑定到传给bind()函数的值。
基本包装类型
引用类型与基本类型的区别是对象的生存期。在调用基本类型的方法时,后台会创建基本类型的实例,在实例上调用指定的方法,但代码执行完会立即被销毁。
- Boolean类型 永远不要使用
- Number类型
- String
- charAt() 基于0的字符位置,以单字符字符串的形式返回给定位置的那个字符。
- charCodeAt() 返回的是字符编码
- concat() 将1个或多个字符串串连起来(实际用+号多)
- slice() 第一个参数指定字符串开始的位置,第二个参数表示子字符串到哪里结束
- substr() 第一个参数指定字符串开始的位置,第二个参数表示返回字符个数。
- substring() 第一个参数指定字符串开始的位置,第二个参数表示子字符串到哪里结束
- indexOf() 从字符串中搜索给定的子字符串,返回位置,没有则返回-1
- trim() 创建一个字符串的副本,删除前置及后缀的所有空格。
- toLowerCase() 大写
- toUpperCase() 小写
单体内置对象
- Global
- encodeURI、encodeURIComponent 编码
- decodeURI、decodeURIComponent 解码
- eval js解析器 eval("alert('hi')"); === alert("hi");
- Math
- min()、max() 一组数值中的最小值和最大值
- ceil 向上舍入
- floor 向下舍入
- round 标准舍入
- random 大于等于0小于1的一个随机数