对象是一种类型,即引用类型。而对象的值就是引用类型的实例。在ECMAScirpt中引用类型是一种数据类型,用于将数据和功能组织在一起。常被称为类。但ECMAScript并没有这种东西。ECMAScirpt是一种面向对象的语言,却不具备传统面向对象语言所支持的类和接口等基本结构。
一、Object类型
创建Object类型有两种方式。一种是使用new运算符,一种是字面量表示法。
1.使用new运算符创建Object
1 var box = new Object(); // new 方式 2 box.name = ‘xxyh‘; // 创建属性字段 3 box.age = 19; // 创建属性字段
2.new 关键字可以省略
var box = Object(); // 省略了new关键字
3.使用字面量方式创建Ojbect
var box = { name:‘xxyh‘, age:19 };
4.属性字段也可以使用字符串形式
var box = { ‘name‘:‘xxyh‘, ‘age‘:19 };
5.使用字面量及传统复制方式
var box = {}; box.name = ‘xxyh‘; box.age = 28;
6.两种属性输出方式
alert(box.age); // 点表示法输出 alert(box[‘age‘]); // 中括号表示法输出,注意引号
7.给对象创建方法
var box = { run:function() { // 对象中的方法 return ‘run方法运行……‘; } } alert(box.run()); // 调用对象中的方法
8.使用delete删除对象属性
delete box.name; // 删除属性
在实际开发过程中,一般我们更加喜欢字面量的声明方式。因为它清晰,语法代码少,而且还给人一种封装的感觉。字面量也是向函数传递大量可选参数的首选方式。
function box(obj) { // 参数是一个对象 if (obj.name != undefined) alert(obj.name); if (obj.age != undefined) alert(obj.age); } box({ // 调用函数传递一个对象 name:‘xxyh‘; age:19 });
二、Array类型
ECMAScript中的 Array 类型与其他语言中的数组类型有很大的区别。虽然数组都是有序排列,但ECMAScript中的数组每个元素可以保存任何类型。ECMAScript中数组的大小也是可以调整的。
创建Array类型的方式:第一种是new运算符,第二种是字面量。
1.使用 new 关键字创建数组(new关键字可以省略)
var box = new Array(); // 创建一个数组 var box = new Array(10); // 创建一个包含10个元素的数组 var box = new Array(‘xxyh‘, 5, ‘菜鸟程序员‘, ‘魔都‘); // 创建一个数组并分配好了元素
2.使用字面量方式创建数组
var box = []; var box = [‘xxyh‘, 5, ‘菜鸟程序员‘, ‘魔都‘]; var box = [1,2,]; // 禁止,IE会识别出3个元素 var box = [,,,,,]; // IE会有识别的问题
PS:和Object一样,字面量的写法不会调用 Array()构造函数
3.使用索引下标来读取数组的值
alert(box[2]); // 获取第三个元素,元素下标从0开始 box[2] = ‘很菜的程序员‘; // 修改第三个元素 box[4] = ‘半路出家的菜鸟‘; // 增加第五个元素
4.使用length属性获取数组元素量
alert(box.length); // 获取元素个数 box.length = 10; // 强制元素个数 box[box.length] = ‘正在学习JS‘; // 通过length给数组增加一个元素
5.创建多维数组
var box = [ { name:‘xxyh‘, age:25, run:function() { return ‘我要return了啊‘; } }, [‘阿里巴巴‘,‘度娘‘, new Object()], // 第二个元素是数组 ‘江苏‘, // 第三个元素是字符串 1+1, // 第四个元素是数值 new Array(1,2,3) // 第五个是数组 ]; alert(box);
三、对象中的方法
转换方法
对象或数组都具有toLocaleString()、toString()和valueOf()方法。其中toString()和valueOf()无论重写了谁,都会返回相同的值。数组会讲每个值进行字符串形式的拼接,以逗号隔开。
var box = [‘xxyh‘, 25, ‘菜鸟‘]; // 字面量数组 alert(box); // 饮食调用了toString() alert(box.toString()); // 和 valueOf()返回一致 alert(box.toLocaleStrign()); // 返回值和上面两种一致
默认情况下,数组字符串都会以逗号隔开。如果使用join()方法,则可以使用不同的分隔符来构建这个字符串。
var box = [‘xxyh‘, 25, ‘半路出家的菜鸟‘]; alert(box.join[‘|‘]); // xxyh|25|半路出家的菜鸟
栈方法
ECMAScript数组提供了一种可以让数组像栈一样限制插入和删除项的数据结构。栈是一种数据结构(先进后出)。ECMAScript为数组专门提供了push()和pop()方法。
push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。而pop()方法则从数组末尾移除最后一个元素,减少数组的长度,然后返回移除的元素。
var box = [‘xxyh‘, 25, ‘菜鸟码农‘]; // 字面量声明 alert(box.push(‘魔都‘)); // 数组末尾添加一个元素,并返回长度 alert(box); // 查看数组 box.pop(); // 移除数组末尾元素,并返回移除的元素 alert(box); // 查看元素
队列方法
队列方法是先进先出。对列在数组的末端添加元素,在数组的前端移除元素。通过push()向数组末端添加一个元素,通过shift()方法从前端移除数组元素
var box = [‘xxyh‘, 24, ‘菜鸟‘]; // 字面量声明 alert(box.push(‘上海‘)); // 数组末尾添加一个元素,并返回长度 alert(box); // 查看数组 alert(box.shift()); // 移除数组开头元素,并返回移除的元素 alet(box); // 查看数组
ECMAScript还提供了一个unshift()方法,它和shift()的功能完全相反,unshift()方法为数组的前端添加一个元素。
var box = [‘xxyh‘, 24, ‘菜鸟‘]; // 字面量声明 alert(box.unshift(‘上海‘,‘中国‘)); // 数组开头添加两个元素 alert(box); // 查看数组 alert(box.pop()); // 移除数组末尾元素,并返回移除的元素 alert(box); // 查看数组
重排序方法
数组中已经存在两个可以直接用来排序的方法:reverse()和sort()。
reserve() 逆向排序
var box = [1,2,3,4,5]; // 数组 alert(box.reverse()); // 逆向排序,返回排序后的数组 alert(box); // 原数组也被逆向排序了,说明是引用
sort() 从小到大排序
var box = [4,3,5,8,6]; alert(box.sort()); // 从小到大排序,返回排序后的数组 alert(box); // 原数组也被从小到大排序了
sort方法在默认排序的数字排序上有些问题,因为数字排序和数字字符排序的算法是一样的。我们必须修改这一特征,修改的方式,就是给sort(参数)方法传递一个函数参数。
function compare(value1, value2) { if (value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; } } var box = [0, 1, 5, 10, 15]; alert(box.sort(compare));
操作方法
concat()方法可以基于当前数组创建一个新数组。slice()方法可以基于当前数组获取指定区域的元素并创建一个新数组,splice()主要用于向数组的中部插入元素。
var box = [‘xxyh‘, 24, ‘上海‘]; // 当前数组 var box2 = box.concat(‘在路上‘); // 创建新数组,并添加新元素 alert(box2); // 输出新数组 alert(box); // 当前数组无变化 var box = [‘xxyh‘, 18, ‘上海‘]; // 当前数组 var box2 = box.slice(1); // box.slice(1,3), 2-4之间的元素 alert(box2); // 18,上海 alert(box); // 当前数组
splice中的删除功能:
var box = [‘xxyh‘, 18, ‘上海‘]; var box2 = box.splice(0,2); // 截取前两个元素 alert(box2); // 返回截取的元素 alert(box); // 当前数组被截取的元素被删除
splice中的插入功能:
var box = [‘xxyh‘, 18, ‘上海‘]; var box2 = box.splice(1, 0, ‘程序猿‘, ‘上海‘); // 没有截取,但插入两条 alert(box2); // 在第2个位置插入两条 alert(box); // 输出
splice中的替换功能:
var box = [‘xxyh‘, 18, ‘上海‘]; var box2 = box.splice(1,1,100); // 截取第二条,替换成100 alert(box2); // 输出截取的28 alert(box); // 输出数组