1、通过构造函数来创建
2、通过字面量表示法来创建对象
Array类型
同样Array也有两种创建方式:
如果我们想要打印数组中所有的值,直接打印数组的变量名就可以:
往数组添值:
栈方法、队列方法:
关于数组的排序:
数组的一些操作方法:
查找位置方法
迭代方法
归并方法
Date类型
RegExp类型
Function类型
三种表示法:
方法重载
函数内部属性(arguments 和 this)
基本包装类型
浏览器的内置对象
URI 编码方法
总结
我们在《一步步学习javascript基础篇(1):基本概念》中简单的介绍了五种基本数据类型Undefined、Null、Boolean、Number和String。今天我们主要介绍下复杂数据类型(即引用数据类型)
Object类型
我们用的最多的引用类型就属object类型了,一般用来存储和传输数据是再好不过的。然,它的两种创建方式我们是否了解呢?
1、通过构造函数来创建
如: var obj = new Object();
在js中的引用类型有个非常灵活的用法,可以动态的附加属性和赋值。
如:
var obj = new Object(); obj.name = "张三";//动态添加属性并赋值 obj.age = 23; alert(obj.name);
2、通过字面量表示法来创建对象
现在大家用得比较多的就是字面量表示法来创建对象了。
如:
var obj = { name: "张三", age: 23 }; alert(obj.age);
和上面的效果是等效的。通过这样方式创建感觉结构更加的清晰,更加有封装的感觉。:)
我们还可以这样用
如:
var obj = {}; obj.name = "张三"; obj.age = 23; alert(obj.age);
如:
var obj = { "name": "张三",//给属性加上双引号 age: 23 }; alert(obj.name);
是不是感觉很强大很灵活呢?我在访问属性的时候一般都是点出来,但是还有另外的方式。
如:(我们可以使用中括号的形式来访问属性值)
var obj = { "name tow": "张三", age: 23 }; //alert(obj.name tow);//这里会报错,属性不能有空格 alert(obj["name tow"]);//这里可以正常弹出
例:
Array类型
除了object之外,应该属数组用的最多了。下面来罗列下常见用法。
同样Array也有两种创建方式:
var arr = new Array(1, 2, 3, 4, 5);//通过构造函数创建 var arr2 = [5, 4, 3, 2, 1];//通过字面量表达式来创建
上面两种方式是等效的,我们可以直接通过下标的方式来访问数组: alert(arr[2]); 。
如果我们想要打印数组中所有的值,直接打印数组的变量名就可以:
var arr2 = [5, 4, 3, 2, 1];//通过字面量表达式来创建 var str2 = ""; for (var i = 0; i < arr2.length; i++) { str2 += arr2[i] + "," } alert(str2);//打印拼接的字符串 alert(arr2);//直接打印变量名(实际上会自动调用数组的toString方法)
例:
var arr2 = [5, 4, 3, 2, 1];//通过字面量表达式来创建 var str2 = ""; for (var i = 0; i < arr2.length; i++) { str2 += arr2[i] + "," } alert(str2);//打印拼接的字符串
例:
var arr2 = [5, 4, 3, 2, 1];//通过字面量表达式来创建 alert(arr2);//直接打印变量名(实际上会自动调用数组的toString方法)
上面直接打印arr2,我们发现默认都是以逗号分隔的。那么有时候,我们不想用逗号怎么办呢。那你可能可以用到join方法
var arr2 = [5, 4, 3, 2, 1];//通过字面量表达式来创建 alert(arr2.join('_'));//直接打印变量名(实际上会自动调用数组的toString方法)
往数组添值:
我们可以直接: arr2[4] = 7; arr2[5] = 8;
还有一种更加巧妙地添值方式: arr2[arr2.length] = 9; arr2[arr2.length] = 10; ,下标length刚好是数组最大长度的下一个,添加值后length再次动态自动累计。
栈方法、队列方法:
什么是栈?(后进先出)。什么是队列?(先进先出),我们怎样用数组来模仿这种数据结构的访问方式?下面通过一张图来解释下数组对象提供的四个方法。
从图可以看出:shift和push、unshift和pop的组合可以实现栈的数据结构访问,shitf和pop、shift和unshift的组合可以实现队列的数据机构访问方式。 这里需要注意:pop和shift取数据的同时,数组中对于的值也同时移除了。
例:
var arr2 = [5, 4, 3, 2, 1]; alert("arr2.pop:" + arr2.pop() + " arr2:" + arr2);
关于数组的排序:
关于数组的排序有sort(正)reverse(反)。
先看个例子,大家猜想下结果:
var arr2 = [5, 14, 23, 12, 1]; alert(arr2.sort());
然结果并不是我们想要的:
var arr2 = [5, 14, 23, 12, 1]; alert(arr2.sort());
为什么会这样呢?因为sort不会直接比较数字类型,而已转为string了再做的比较。那么我们想要比较数字怎办?我们可以往sort传函数,例:
function mycompare(o1, o2) { return o1 - o2;//如果为正数则o1大,负数则o2大,零则相等。 } var arr2 = [5, 14, 23, 12, 1]; alert(arr2.sort(mycompare));
有人会问o1和o2是怎么来的?这是sort函数规定的。这样说大家可能不好接受。下面,我们自己来模拟下sort的排序,大家就明白了。