引用类型的创建使用New操作符后跟创造函数
var person = new Object();
创造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。
下面着重介绍以些常用的构造函数:
Object类型:
创建对象实例的方法有两种,第一种是使用new操作符后跟Object构造函数,另一种是使用对象字面量表示法。
//使用new关键字创建对象
var person = new Object();
person.name = 'sam';
person.age = 29;
//使用字面量表示法
var person = {
name:'sam',
age:29
};
访问对象的属性可使用点表示法,也可使用方括号表示法。
alert(person.name) //'sam'
alert(person['name']) //'sam'
Array类型:
创建数组的基本方式有两种,第一种使用Array构造函数(new关键字可省略),第二种是使用字面量表示法创建。
//new操作符可省略
var color = new Array()
//字面量表示法
var color = ['red','blue','green']
var names = [] //创建了一个空数组
使用构造函数创建数组,可在()内输入数值创建指定数量的数组,也可在括号内添加数组包含项。
数组可保存任意类型的数据,可动态调整数组大小。(数组长度大于实际内容长度,会自动填充undefined)
length属性可返回数组的长度,它不只是只读,可通过设置length的长度,动态设置数组长度。(使用[Array.length]可为数组末尾添加新项)
检测对象是否是数组,可使用Array.isArray()方法。
数组转换为字符串可使用三个方法:
- toLocaleString()方法
- toString()方法
- valueOf()方法
返回的字符串,以逗号分隔,可使用join()方法使用特定的分隔符。
栈方法:遵循先进后出,后进先出的原则。
- push()方法向数组的末尾逐个添加,后返回修改后的数组长度
- pop()方法移除数组的最后一项,并返回移除值
队列方法:在数组的末端添加,从前端移除
- push()方法向数组的末尾逐个添加,后返回修改后的数组长度
- shift()方法将数组的第一项移除,并返回该项
unshift()方法,故名思及就是与shift()方法相反,在数组的前端添加项,并返回新数组长度。
重排序方法:将数组以某种顺序重新排列
- reverse()方法,反转数组项的顺序
- sort()方法,调用每个数组项的toString()方法,然后比较字符串以排序(可接受函数排序*)
*创造函数,将函数名传给sort方法,数组使用sort方法时便会根据函数的方法排序。
操作方法:复制,选择复制,删除,替换数组项的方法
- concat()方法,根据当前数组创建新数组,若含有参数,则添加到数组的后端。
- slice()方法,根据当前数组的一或多项创建新数组,括号内参数为开始位置和结束位置(不包含结束位置)
以上两个方法仅仅创建新数组,不会修改原数组。
- splice()方法,接受三个参数,分别为开始操作的第一项位置、删除项的个数、插入项的内容。可实现删除、插入、替换三大功能。返回一个数组,该数组包含从原始数组删除的项,若没有删除则返回空数组。
位置方法:查找数组的项,返回位置,若没找到则返回-1。接受两个参数(第二个参数可选)查找的项和查找起始位置。
检索相当于使用全等操作符(===)需要数据类型和内容都一致才会匹配
- indexOf()方法从数组的开头(0位置)开始检索
- lastIndexOf()方法从数组的末尾开始检索
迭代方法、归并方法没看懂,等后期使用时在做专门介绍
DATE类型:
创建日期对象,使用new关键字和Date构造函数即可
var now = new Date()
调用Date函数而不传参会返回当前的时间和日期,若想根据特定的时间和日期来创建日期对象,必须传入表示该日期的毫秒数(以1970年1月1日午夜为起点到该时间)
为简化这一过程,JavaScript提供了两种方法:
- Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应时间的毫秒数(不识别的返回NaN),若直接将表示时间的字符串传给Date构造函数,也会在后台调用该方法。
- Date.UTC()方法同样返回表示日期的毫秒数,参数为年,月(从0开始),日,小时,分钟,秒,毫秒(年月必填,其他若没有默认为0,日期则为1)
ECMAScript 5 添加了Date.now()方法,返回表示调用这个方法的日期和时间毫秒数。
- toLocaleString()方法按照与浏览器设置地区相适应的格式返回日期和时间
- toString()方法通常返回带有时区信息的日期和时间,其中时间一般为军用时间
- valueOf()方法则不返回字符串,返回日期的毫秒表示
其他用于格式化日期和组件的方法就不一一赘述
RegExp类型:
正则表达式,具体内容还在研究中,后期会专门写一个文章。
Function类型:
函数也是对象,具有属性和方法,函数名只是指向函数对象的指针,不会与函数绑定。
声明函数的方法有三种:函数声明语法定义、函数表达式定义函数和使用Function构造函数
//函数声明语法定义
function sum(a,b){
return a + b;
}
//使用函数表达式定义函数使用Function构造函数
var sum = function (a,b){
return a + b;
};
//使用Function构造函数 接收多个参数,最后一个参数为函数体
var sum = new function('a','b','return a + b'); //不推荐
使用不带圆括号的函数名是访问函数指针,而非调用函数。
同函数名的第二个函数会覆盖第一个函数
函数声明与函数表达式的区别:解析器会先读取函数声明,使其在执行任何代码之前可用;而函数表达式则必须等到解析器执行到他所在的代码行,才会被解释执行。
在ECMAScript中,函数名本来就是变量,所以也可作为另一个函数的参数来使用。callSomeFunction()函数就是接收函数名的函数,他的第一个参数为想要使用的函数名(不带括号的指针),第二个参数为给使用函数提供的参数。
也可从函数中返回另一个函数
函数内部属性:函数内部有两个特殊的对象,arguments和this,arguments是一个数组对象,包含着传入函数中的所以参数,他有一个callee的属性,指向arguments对象的函数。this引用的是函数执行的环境对象。
ECMAScript 5 定义了另一个函数对象的属性caller,这个属性保存着当前调用函数的函数引用。(调用这个函数的函数,若在全局作用域中调用当前函数,则为null)
函数的属性和方法:函数是对象,对象就有属性和方法,每个函数都包含两个属性length和prototype,length属性表示函数希望接收的命名参数的个数。对于ECMAScript中的引用类型而言,prototype是保存它们所有实例方法的真正所在(toString()方法,valueOf()方法都保存在prototype名下)。prototype属性时不可枚举的,无法使用for-in发现。每个函数都包含两个非继承而来的方法,apply()方法和call()方法,两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。ECMAScript 5 还定义了bind()方法(具体使用方法没看懂)
基本包装类型:
ECMAScript提供了三种特殊的应用类型:Boolean、Number、String
每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据
引用类型和基本包装类型的主要区别就是对象的生存期,new操作符创建的引用类型在执行流离开当前作用域之前都保存在内存中,而自动创建的基本包装类型的对象,只存在于一行代码的执行瞬间,然后立即被销毁。
对基本包装类型调用typeof会返回'object',而且所有基本包装类型的对象在转换为布尔类型时的值都是true
Boolean类型:
valueOf()方法返回基本类型值true/false、toString()方法返回字符串'true'/'false'
Number类型:
valueOf()方法返回对象表示的基本类型的数值,toLocaleString()和toString()方法则返回字符串形式的数值,toString()方法可根据参数选择选择进制。
toFixed()方法会按照指定的小数位返回数值的字符串表示
toExponential()方法格式化数值,返回以指数表示法(e表示法,参数为小数的位数)
toPrecision()方法返回固定大小格式的数值(参数为所有数字的位数)
String类型:
String类型的每个实例都有一个length属性,表示字符串中包含的字符数。
- 字符方法:charAt()方法以单字符字符串的形式返回给定位置的那个字符,charCodeAt()方法返回指定位置的字符编码。ECMAScript 5 中还可以使用方括号加数字索引来访问字符串中的特定字符
- 字符串操作方法:concat()方法用于将一或多个字符串拼接起来,返回拼得的新字符串。还有三个基于子字符串创建新字符串的方法slice()、substr()和substring()接受一或两个参数,第一个参数指定子字符串的开始位置,第二个参数表示字符串结束的位置,返回被操作字符串的子字符串,对原始字符串没有任何影响。substr()方法的第二个参数指定返回字符个数。
- 字符串位置方法:从字符串中查找子字符串的方法,indexOf()方法和lastIndexOf()方法,前者从字符串的开头向后搜索子字符串,后者从字符串的末尾向前搜索子字符串,并返回位置(未找到则返回-1)。可接受第二个参数为搜索起始位置
- trim()方法:创建字符串的副本,删除前置及后缀的所有空格,然后返回结果。
- 字符串大小写转换方法:toLowerCase()和toUpperCase()是两个讲点的方法,toLocaleLowerCase()和toLocaleUpperCase()方法则针对特定地区的实现
- 字符串的模式匹配方法:match()方法,返回数组。search()方法,返回第一个匹配项的索引。(参数接受正则表达式或RegExp对象)替换字符串的操作使用replace()方法,第一个参数可以是一个RegExp对象或一个字符串,第二个参数为需要替换为什么(字符串或者函数)。split()方法可基于指定分隔符将字符串分割成多个子字符串,并将结果放在一个数组中,可接受第二个参数,用于指定数组大小。
- localeCompare方法:比较两个字符串的大小
- fromCharCode()方法:接受一或多个字符编码,将其转换为字符串。
单体内置对象:ECMAScript提供的、不依赖与宿主环境的对象,这些对象在程序执行之前就已经存在了。包括Object,Array,String和两个对象Global,Math
Global对象:不属于任何其他对象的属性和方法,最终都是他的属性和方法。所有全局作用域中定义的属性和函数都是Global对象的属性。
- URI编码方法:用UTF-8编码对URI中的特殊字符或者全部字符进行编码和解码
- eval()方法:类似于ECMAScript解析器
- Global对象的属性
- window对象:全局作用域中声明的所有变量和函数
Math对象:保存数学公式和信息
- Math对象的属性
- min()和max()方法:确定一组数值的最小值和最大值
- 舍入方法:Math.ceil()向上舍入为整数,Math.floor()向下舍入为整数,Math.round()四舍五入
- random()方法:返回大于零小于一的随机数,函数selectFrom()接受两个参数,应返回的最大数和最小数(可返回任意范围的随机数)