对象(引用类型的值)是引用类型的一个实例,新对象是使用new操做符后跟一个构造函数来建立的。构造函数自己就是一个函数,该函数用于建立新对象。ECMAScript提供了不少原生引用类型(Object,Array,Date,RegExp,Funcion…)。javascript
1、Object类型html
一、 建立方式java
① 、使用new操做符后跟Object构造函数正则表达式
Var person=new Object();编程
Person.name=’xxxx’;windows
Person.age=10;数组
② 对象字面量标识法浏览器
Var person={数据结构
Name:’xxxx’,app
Age:10
}
属性默认都是字符串,打不打引号均可以。
二、 使用方式(访问对象的属性)
① 、点表示法
Person.name;person.age;
② 、中括号表示法
Person[‘name’];person[‘age’]
方括号中的字符串能够经过变量传入
2、Array类型
ECMAScript中的数组相对于其余语言来说比较特殊,是个功能比较多的数据类型。主要区别在于:每一项均可以保存任何类型的数据,数组的大小是能够动态调整的。
一、 建立方式
① 、使用Array的构造函数
Var colors = new Array();
Var colors = new Array(“aa”,”bb”,”cc”);
② 、使用数组字面量表示法
Var colors = [“aa”,”bb”,”cc”];
二、 Array用做栈(FILO)
Array类型自带了两个方法push(),pop(),若是要实现一个栈的数据结构能够直接用Array类型定义。
三、 Array用做队列(FIFO)
Array类型的shift()方法能够取得数组中第一个元素并移除该元素,结合push()方法,就能够将一个数组当作队列来使用
四、 一些经常使用方法(混个眼熟,用到时再去查)
① 、重排序:Reverse()、sort()
② 、链接Concat();
③ 建立新数组slice();
④ 插入删除替换splice();
⑤ 查找索引indexOf()、lastIndexOf();
⑥ 迭代方法:every()、filter()、forEach()、map()、some();
⑦ 缩小方法:reduce()、reduceRight()
3、Date类型
4、RegExp类型
以上两种类型,低端应用中比较少见,尤为是正则表达式,博大精深不是一句两句能明白的,用到再查API吧。
5、Function类型
什么,函数居然是一种数据类型,没错,ECMAScript中函数其实是对象,函数与其余引用类型同样能够具备属性和方法。每一个函数都是Function类型的实例,函数名其实是一个指向函数对象的指针。这意味着js中定义函数时的函数名单从定义函数的角度讲意义不大,由于函数执行的逻辑跟函数名彻底不要紧。函数名既然是一个变量那么也就意味着它能够做为参数传递给另外的函数,也能够做为函数的返回值返回。
ECMAScript中函数没有定义返回值类型,由于返回值能够是任何类型,这是跟变量的定义相符合的,由于一个变量能够表示任何类型的数据。
Ex1:
Function aa(){};
Var bb=function(){};//与上面效果彻底相同。
Ex2:
function aa () {
alert('aa');
};
var aa = function() {
alert('bb');
}
调用aa()时将会输出bb
Ex3:
如下两个button单击后都输出了2,童鞋们,亮瞎眼了吗?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var golbalaaa= 1;
function test() {
var age=1;
alert(age);
}
function test1() {
var age1=2;
alert(age1);
};
test=test1;
</script>
</head>
<body>
<form>
<input type="button" onclick="test()" />
<input type="button" onclick="test1()" />
</form>
</body>
</html>
一、 函数声明与函数表达式的区别
这里定义函数声明就是带函数名的函数的定义,函数表达式就是不带函数名的函数定义。
解析器在向执行环境中加载数据时,对函数声明和函数表达式并不是一视同仁,解析器会率先读取函数声明,并使其在执行任何代码以前可用(能够访问),这也就意味着经过函数声明方式定义的函数能够先使用后定义;对于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行,这也就是说若是经过这种方式定义的函数必须先定义而后才能使用,不然确定会报错(unexpected identifier)。
二、 函数的内部属性
① arguments:数组对象,包含着传入函数中的全部参数
a) 这个对象有一个比较特殊的属性:callee,是一个指针,指向拥有这个arguments对象的函数。
② This:this引用的是函数的执行环境对象(与这个函数处于同一级别的环境,也就是这个函数的调用者的做用域)
③ Caller:调用当前函数的函数的引用,若是是在全局做用域中调用当前函数,它的值为null
④ Length:函数的参数的个数
⑤ Prototype:神奇的原型(先混个眼熟吧,这个东西是跟继承相关)
三、 函数的内部方法
如下两个方法的用途都是在特定的做用域中调用函数,实际上等于设置函数体内this对象的值。
① apply():接受两个参数,一个是在其中运行函数的做用域,另外一个是参数数组(能够是Array实例,也可使arguments对象)
② call():与apply()的区别在于接受参数的方式不一样,第一个this没有变化,变化的是其他参数都直接(逐个列出来)传递给函数
以上方法真正强大的地方是可以扩充函数赖以运行的做用域,这样一来对象就能够不和方法有任何耦合关系,对象须要什么方法能够经过这种方式调用。
③ bind()。这个方法会建立一个函数的实例,其this值会被绑定到传给bind()函数的参数(通常是一个对象)的做用域上。是否是有种依赖注入的味道?
6、基本包装类型
常见的OO编程语言都有基本类型的包装类型,目的是为了更方便处理基本类型数据,由于包装了以后就能够增长更多额外的功能。ECMAScript中提供了3个特殊的引用类型:Boolean、Number、String。
Ex1:
Var s1 = ‘xxxxxxxxxxxxxx’;
Var s2 = v1.substring(2);
解释器其实作了这么几个操做:建立一个String类型的实例,在这个String类型的实例上调用substring()方法,销毁这个实例。
使用new建立的引用类型的对象,在执行流离开当前做用域以前都一直保存在内存中。而自动建立的引用类型的对象,则只存在于一行代码的执行瞬间,而后当即被销毁,这意味着咱们不能再运行时为基本类型值添加属性和方法。
Boolean类型没什么好说的,主要过一下Number类型与String类型的一些常见方法。
一、 Number类型
① toFixed():按照指定的小数位返回数值的字符串表示
② toExponential():返回数值的指数形式表示的字符串
③ toPrecision():
二、 String类型
① 、length属性,表示包含多少个字符
② 、charAt()、charCodeAt():访问字符串中特定位置的字符
③ 、concat():字符串拼接
④ 、slice()、substr()、substring()
⑤ 、indexOf、lastIndexOf()
⑥ 、trim()
⑦ 、toLowerCase()、toLocalLowerCase()、toUpperCase()、toLocalUpperCase()
⑧ 、replace()
⑨ 、split()
7、单体内置对象
所谓打你内置对象:有ECMAScript提供的,不依赖与宿主环境的对象。Object,Array,String等都是内置对象,这里再补充两个Global、Math。
在大多数的ECMAScript实现中都不能直接访问Global对象,不过WEB浏览器实现了承担该角色的windows对象。全局变量和函数都是Global对象的属性。Math对象提供了不少属性和方法,用于辅助完成负载的数学计算。
本文系我的读书总结,转载请注意出处