JavaScript基础篇(3)之Object、Function等引用类型

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再次动态自动累计。

栈方法、队列方法:

什么是栈?(后进先出)。什么是队列?(先进先出),我们怎样用数组来模仿这种数据结构的访问方式?下面通过一张图来解释下数组对象提供的四个方法。

JavaScript基础篇(3)之Object、Function等引用类型

从图可以看出: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的排序,大家就明白了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgzgdd.html