JavaScript高程学习笔记之引用类型(5)


[TOC]javascript


1.object类型

建立object实例有两种 第一种:new操做符后跟Object构造函数var person = new Object(); 第二种:对象字面量前端

var person = {
		name = "yohann";
		age = 22;
	};

使用对象字面量语法,属性名也能够用字符串 开发人员更青睐对象字面量语法java

alert(person["name"]);
alert(person.name);

方括号语法的优势能够经过变量名来访问属性 若是属性包含致使语法错误的字符,或者属性名是关键字保留字,可使用方括号法 一般,除非必须使用变量来访问属性,建议使用点表示法正则表达式

2.Array类型

  • 每一项均可以保存任何类型的数据
  • 数组的大小是动态调整的 建立数组的两种方法 第一种:使用Array构造函数var colors = new Array(); 第二种:使用数组字面量var colors = ["red", "blue", "green"]; 数组length属性不是只读的,能够对其读写
2.1 检测数组

肯定某个对象是否为数组,能够用Array.isArray()方法,不用管是哪一个全局环境中建立的 兼容IE9+,Firefox4+,Safari 5+,Opera 10.5+,Chromeexpress

2.2 转换方法

数组的toString方法会返回有数组中每一个值字符串拼接而成的以一个逗号分开的字符串 valueOf方法,toLocaleString方法 调用数组的toLocaleString方法会建立一个以逗号分开的字符串 使用join()方法,可使用不一样的分隔符来构建这个字符串数组

2.3 栈方法

ECMAScript为数组提供push()方法和pop()方法,实现相似栈的行为 push()方法接收任意数量的形参,逐个添加到数组末尾,并返回修改后的长度 pop()方法从数组移出最后一项,减小数组length值,而后返回移出的项浏览器

2.4 队列方法

队列的访问规则是先进先出 shift()方法,移除数组的第一个项并返回该项,同时数组长度减一。 unshift()方法,在数组前端添加任意个项,并返回数组的长度 用unshift方法和pop方法能够相反的模拟队列app

2.5 重排序方法

数组中存在两个直接用来重排序的方法:reverse()和sort() reverse()方法:反转数组项的顺序 sort()方法能够接收一个比较函数做为参数值,以便咱们指定哪一个值在哪一个值前面 比较函数经过返回一个小于零,等于零或大于零的值来影响排序结果dom

2.6 操做方法

concat()方法:基于当前数组中的全部项,建立一个数组。传递给该方法是一个或多个数组,则将每一项添加到结果数组中 slice()方法: 基于当前数组中的一个或多个项建立数组。接收一个或者两个参数。一个参数返回从这个参数开始到数组末尾的数组。两个参数返回起始和结束位置的项,但不包含结束位置项 splice()方法:向数组中部插入项函数

  • 删除:能够删除任意数量的项,指定两个参数,删除第一项的位置和要删除的项数
  • 插入:指定位置插入任意数量的项。提供三个参数,起始位置,0(要删除的项数)和要插入的项
  • 替换:指定位置插入任意数量的项。提供三个参数,起始位置,要删除的项数和要插入任意数量的项数
2.7 位置方法

indexOf方法和lastIndexOf方法 两个方法都接收两个参数:要查找的项和表示查找起点位置的索引 前者从数组的开头位置(0)开始向后查找,后者从数组的末尾开始向前查找 要查找的项必须严格相等

2.8 迭代方法
  • every(): 对数组中的每一项运行给定函数,若是函数对每一项都返回true,则返回true
  • filter(): 对数组的每一项运行给定函数,返回给函数会返回true的项组成的数组
  • forEach(): 对数组中的每一项运行给定函数,没有返回值
  • map(): 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
  • some(): 对数组中的每一项运行给定函数,若是函数对任一项返回true,则返true
2.9 归并方法

reduce()和reduceRight()。迭代数组的全部项,构建一个最终的返回值。 reduce()方法从数组的第一项开始,reduceRight()则从数组的最后一项开始 接收两个参数:一个在每一项调用的函和(可选的)做为归并基础的初始值 传递的函数接收四个参数:前一个值,当前值,项的索引和数组对象 例如用此方法执行求数组中全部值之和操做

3.Data类型

建立日期对象,使用new操做符和Data构造函数便可 不传递参数,自动得到当前的日期和时间。 若根据特定的日期和时间建立时间,必须传入表示该日期的毫秒数 简化这一计算过程提供了两个方法:Data.parse()Data.UTC() 前者接收一个表示日期的字符串参数,根据这个字符串参数返回相应日期的毫秒数 Data.parse()日期格式:

  • “月/日/年”,如6/13/2014
  • “英文月名 日,年”,如January 12,2014
  • “英文星期几 英文月名 日 年 时:分:秒 时区”,如Tue May 25 2004 00:00:00 GMT-0700.
  • ISO 8601扩展格式 Data.UTC()方法一样返回日期的毫秒数,不一样的是 Data.UTC()的参数分别是年份,基于0的月份(一月是0,二月是1),月中的那一天(1到31),小时数(0到23),分钟,秒以及毫秒数 例:var allFIves = new Data(Data.UTC(2005, 4, 5, 17, 55, 55)); Data构造函数会模仿Data.UTC(),有一点明显不一样,日期和时间丢失基于本地时间而非GMT建立 ECMAScript5添加了Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数
3.1 继承的方法

Data类型也重写了toLocaleString(),toString()和valueOf()方法 前两个方法在不一样的浏览器中返回的日期和时间格式截然不同

3.2 日期格式化方法

Data类型有专门用于将日期格式化为字符串的方法

  • toDataString ()
  • toTimeString ()
  • toLocaleDataString ()
  • toLocaleTimeString ()
  • toUTCString ()
3.3 日期/时间组件方法

直接取得和设置日期值中特定部分的方法

4. RegExp类型

ECMAScript经过RegExp类型来支持正则表达式

var expression = /pattern/flags ;

正则表达式的匹配模式支持下列的3个标志

  • g: 表示全局模式,即模式将被应用于全部字符
  • i: 表示不区分大小写模式
  • m: 表示多行模式 使用正则表达式字面量和使用RegExp构造函数建立的正则表达式不同
4.1 RegExp实例属性
  • global:布尔值,是否设置了g标志
  • ignoreCase:布尔值,是否设置了i标志
  • lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起
  • multiline:布尔值,是否设置了m标志
  • source:正则表达式的字符串表示
4.2 RegExp实例方法

RegExp的主要方法是exec(),专门为捕获组而设计的。exec()接受一个参数,即要应用模式的字符串,而后返回包含第一个匹配项信息的数组;或者在没有匹配项的状况下返回null。返回的数组包含两个额外的属性:index和input。 index表示匹配项在字符串的位置,input表示应用正则表达式的字符串 RegExp的第二个方法是tes(),它接受一个字符串参数,在模式与该参数匹配的状况下返回true,不然返回false RegExp实例继承的toStringtoLocaleString方法都会返回正则表达式的字面量

4.3 RegExp构造函数属性

构造函数包含一些属性,基于所执行的最近一次正则表达式操做而变化。这些属性分别有一个长属性名和短属性名

  • input $_
  • lastMatch $&
  • lastParen $+
  • leftContext $`
  • multiline $*
  • rightContext $'
4.4 模式的局限性

ECMAScript正则表达式有一些不支持的特性

5. Function类型

每一个函数都是Function类型的实例。 使用函数表达式定义函数,不必使用函数名

5.1 没有重载

建立第二个函数会覆盖引用第一个函数变量

5.2 函数声明与函数表达式

函数声明和函数表达式并不是彻底一致,

alert(sum (10, 10));
function sum(num1 + num2) {
	return num1 + num2;
}
alert (sum (10,10));
var sum = function (num1, num2) {
	return num1 + num2;
};

第一个代码不会出错,第二个代码就会出错

5.3 做为值的函数

能够将一个函数做为另外一个函数的结果返回

function callSomeFunction (someFunction, someArgument) {
	return someFunction (someArgument);
}
5.4 函数内部属性

函数内部有两个特殊的对象,就是arguments和this。arguments主要用途是保存函数参数,它有一个名叫callee的属性,该属性是一个指针,指向拥有arguments对象的函数

function factorial (num) {
	if (num < 1) {
		return 1;
	} else {
		return num * factorial (num - 1);
	}
}

函数执行与函数名牢牢耦合在一块儿,为了消除这种紧密耦合现象可使用arguments.callee

function factorial (num) {
	if (num < 1) {
		return 1;
	} else {
		return num * arguments.callee(num - 1);
	}
}

this引用的是函数执行的环境对象 函数的名字是一个包含指针的变量

5.5 函数属性和方法

每一个函数都包含两个属性:length和prototype。 在建立自定义引用类型和实现继承是,prototype属性极为重要 每一个函数都包含两个非继承而来的方法:apply()call(),实际上等于设置函数体内this对象的值 apply()方法接收两个参数:一个是运行函数的做用域,另外一个是参数数组

function sum(num1, num2) {
	return num1 + num2;
}

function callsum (num1, num2){
	return sum.apply(this, arguments);
}

call方法和apply方法相同。第一个参数没有变化,不过第二个参数要逐个枚举出来 它们真正强大的地方在于可以扩充函数赖以运行的做用域

window.color = "red";
var o = { color: "blue"};

function sayColor(){
	alert (this.color);
}

sayColor();                                     //red
sayColor.call(this);                       //red
sayColor.call(window)                //red
sayColor.call(o);                        //blue

另外一个方法bind()这个方法会建立一个实例,其中this的值会被绑定传给bind()函数的值

window.color = "red";
var o = { color: "blue"};

function sayColor(){
	alert (this.color);
}
var objectSayColor = sayColor.bind(o);
 objectSayColor();           //blue

6. 基本包装类型

ECMAScript提供三个特殊的引用类:Boolean、Number、String. 每读取一个基本类型值,后台会建立一个对应的基本包装类型的对象 基本类型值不是对象,于是不应有方法,其实后台会自动进行处理,定义对象 引用类型与基本包装类的主要区别在于对象的生存周期 new操做符建立的引用类型实例,在离开当前做用域前会一直保存在内存里。而自动建立的基本包装类型的对象,只存在于代码的执行瞬间,而后当即被销毁 使用new调用基本包装类型的构造函数与直接调用同名的转型函数是不同的 例如:

var value = "25";
var number = Number(value);             //转型函数
alert (typeof number);                        //number

var obj = new Number(value);           //构造函数
alert (typeof obj);                              //object
6.1 Boolean类型

基本类型与引用类型的布尔值有很大的区别。 建议永远不要使用Boolean对象

6.2 Number类型

此类型提供了一些用于将数值格式化为字符串的方法 toFixed()按照指定的小数位返回字符串 toExponential()返回以指数表示法 toPrecision()可能返回固定大小(fixed)格式,也可能返回指数格式(Exponential)

6.3 String类型
  1. 字符方法 用于访问字符串中特定字符的方法:charAt()charCodeAt() 其中charCodeAt()会返回特定位置的字符编码 ECMAScript5提供一种用方括号加数字索引来访问字符串中特定字符
  2. 字符串操做方法 concat()方法:将一个或多个字符串拼接,返回拼接获得的新字符串 但实践中使用最多的仍是加号操做符 三个基于字符串建立新字符串的方法:slice()substr()substring() slice和substring第一个参数指定字符串开始的位置,第二个参数指定字符串最后一个字符后面的位置。 substr第二个参数值指定返回的字符个数 若给定参数是负数,它们的行为不尽相同 slice()方法会将传入的负值与字符串长度相加,substr()会将负的第一个参数加上字符串的长度,第二个负的参数转化为0,substring()方法会将全部负值转化为0
  3. 字符串位置方法 从字符串中查找子字符串的方法:indexOf()lastIndexOf()方法 其中indexOf是从前向后查找。lastIndexOf是从后向前查找。 均可以接收可选的第二个参数,表示从那个位置开始查找 将返回的位置保存在数组positions中,以便未来调用
  4. trim()方法 建立一个副本,删除前置及后缀的全部空格,而后返回结果
  5. 字符串大小写转换方法 toLowerCase()toUpperCase()toLocaleLowerCase()toLocaleUpperCase() 后二是针对特定地区实现
  6. 字符串模式的匹配方法 match()方法,只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象 search()方法,参数与match相同。此方法返回字符串第一个匹配项的索引;若是没有匹配项,则返回-1 replace()方法,替换字符串 split()方法,基于指定的分隔符将一个字符串分割成多个字符串
  7. localeCompare()方法 比较两个字符串的值,并返回下列值中的一个
  • 若是字符串在字母表中排在字符串参数以前,则返回一个负数
  • 若是字符串等于字符参数,则返回0
  • 若是字符串在字母表排在字符参数以后,则返回一个正数
  1. fromCharCode()方法 接收一或多个字符编码,而后将他们转换为一个字符串
  2. HTML方法 简化常见HTML格式化任务的方法 详见JavaScript高程p130

7. 单体内置对象

ECMA-262定义了两个单体内置对象

7.1 Global对象

全部在全局做用域中定义的属性和函数都是Global对象的属性

  1. URI编码方法 Global对象的encodeURI方法和encodeURIComponent方法能够对URI(通用资源标识符)进行编码,以便发送给浏览器。 encodeURI()主要用于整个URI,encodeURIComponent()用于URI的某一段 encodeURI()不会对自己属于URI的特殊字符进行编码,而encodeURIComponent()对任何非标准字符进行编码 与两者对应的解码分别是decodeURI()decodeURIComnent()
  2. eval()方法 此方法就像一个完整的ECMAScript解析器,只接受一个参数,即要执行的ECMAScript字符串 eval()执行的代码能够引用在包含环境中定义的变量 严格模式下,在外部访问不到eval()中建立的变量或函数
  3. Global属性 全部原生引用类型的构造函数项Object和Function,都是Global对象的属性
  4. window对象 Web浏览器是将这个全局变量做为window对象的一部分加以实现
7.2 Math对象
  1. math对象属性 大都是可能在计算中用到的特殊值,例如Math.E、Math.LN10等
  2. min()和max()方法 肯定一组数值的最大值和最小值
  3. 舍入方法
  • Math.ceil
  • Math.floor
  • Math.round
  1. random()方法 返回一个大于等于0小于1的一个随机数
  2. 其余方法 详见JavaScript高程p136
相关文章
相关标签/搜索