`
chaoyi
  • 浏览: 291768 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

第八章:对象和数组

阅读更多

学习要点:
1.Object 类型
2.Array 类型
3.对象中的方法

什么是对象,其实就是一种类型,即引用类型。而对象的值就是引用类型的实例。在ECMAScript 中引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称做为类,但 ECMAScript 中却没有这种东西。虽然 ECMAScript 是一门面向对象的语言,却不具备传统面向对象语言所支持的类和接口等基本结构。

 

一.Object 类型
到目前为止,我们使用的引用类型最多的可能就是 Object 类型了。虽然 Object 的实例不具备多少功能,但对于在应用程序中的存储和传输数据而言,它确实是非常理想的选择。
创建 Object 类型有两种。一种是使用 new 运算符,一种是字面量表示法。
1.使用 new 运算符创建 Object

var box = new Object(); //new 方式
box.name = 'chaoyi'; //创建属性字段
box.age = 28; //创建属性字段

 
2.new 关键字可以省略

var box = Object(); //省略了 new 关键字
3.使用字面量方式创建 Object
var box = { //字面量方式
name : 'chaoyi', //创建属性字段
age : 28
};

 
4.属性字段也可以使用字符串星矢

var box = {
'name' : 'chaoyi', //也可以用字符串形式
'age' : 28
};

 
5.使用字面量及传统复制方式

var box = {}; //字面量方式声明空的对象
box.name = 'chaoyi'; //点符号给属性复制
box.age = 28;

 
6.两种属性输出方式

alert(box.age); //点表示法输出
alert(box['age']); //中括号表示法输出,注意引号

 
PS:在使用字面量声明 Object 对象时,不会调用 Object()构造函数(Firefox 除外)。
7.给对象创建方法

var box = {
run : function () { //对象中的方法
return '运行';
}
}
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 : 'chaoyi',
age : 28
});

 
二.Array 类型
除了 Object 类型之外,Array 类型是 ECMAScript 最常用的类型。而且 ECMAScript 中的 Array 类型和其他语言中的数组有着很大的区别。 虽然数组都是有序排列, 但 ECMAScript中的数组每个元素可以保存任何类型。ECMAScript 中数组的大小也是可以调整的。
创建 Array 类型有两种方式:第一种是 new 运算符,第二种是字面量。
1.使用 new 关键字创建数组

var box = new Array(); //创建了一个数组
var box = new Array(10); //创建一个包含 10 个元素的数组
var box = new Array('chaoyi',28,'教师','广州'); //创建一个数组并分配好了元素

 
2.以上三种方法,可以省略 new 关键字。

var box = Array(); //省略了 new 关键字

 
3 使用字面量方式创建数组

var box = []; //创建一个空的数组
var box = ['chaoyi',28,'教师','广州']; //创建包含元素的数组
var box = [1,2,]; //禁止这么做,IE 会识别 3 个元素
var box = [,,,,,]; //同样,IE 的会有识别问题

 
PS:和 Object 一样,字面量的写法不会调用 Array()构造函数。(Firefox 除外)。
4.使用索引下标来读取数组的值

alert(box[2]); //获取第三个元素
box[2] = '学生'; //修改第三个元素
box[4] = '计算机编程'; //增加第五个元素

 
5.使用 length 属性获取数组元素量

alert(box.length) //获取元素个数
box.length = 10; //强制元素个数
box[box.length] = 'JS 技术'; //通过 length 给数组增加一个元素

 
6.创建一个稍微复杂一点的数组

var box = [
{ //第一个元素是一个对象
name : 'chaoyi',
age : 28,
run : function () {
return 'run 了';
}
},
['马云','李彦宏',new Object()],//第二个元素是数组
'江苏', //第三个元素是字符串
25+25, //第四个元素是数值
new Array(1,2,3) //第五个元素是数组
];
alert(box);

 

PS:数组最多可包含 4294967295 个元素,超出即会发生异常。

 

三.对象中的方法
转换方法
对象或数组都具有 toLocaleString()、 toString()和 valueOf()方法。 其中 toString()和 valueOf()无论重写了谁,都会返回相同的值。数组会讲每个值进行字符串形式的拼接,以逗号隔开。

var box = ['chaoyi',28,'计算机编程']; //字面量数组
alert(box); //隐式调用了 toString()
alert(box.toString()); //和 valueOf()返回一致
alert(box.toLocaleString()); //返回值和上面两种一致

 
默认情况下,数组字符串都会以逗号隔开。如果使用 join()方法,则可以使用不同的分
隔符来构建这个字符串。

var box = ['chaoyi', 28, '计算机编程'];
alert(box.join('|')); //chaoyi|28|计算机编程

 
栈方法


ECMAScript 数组提供了一种让数组的行为类似于其他数据结构的方法。也就是说,可以让数组像栈一样,可以限制插入和删除项的数据结构。栈是一种数据结构(后进先出), 也就是说最新添加的元素最早被移除。而栈中元素的插入(或叫推入)和移除(或叫弹出),只发生在一个位置——栈的顶部。ECMAScript 为数组专门提供了 push()和 pop()方法。



 
push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。而 pop()方法则从数组末尾移除最后一个元素,减少数组的 length 值,然后返回移除的元素。

var box = ['chaoyi', 28, '计算机编程']; //字面量声明
alert(box.push('广州')); //数组末尾添加一个元素,并且返回长度
alert(box); //查看数组
box.pop(); //移除数组末尾元素,并返回移除的元素
alert(box); //查看元素

 
队列方法
栈方法是后进先出, 而列队方法就是先进先出。 列队在数组的末端添加元素, 从数组的前端移除元素。通过 push()向数组末端添加一个元素,然后通过 shift()方法从数组前端移除一个元素。



 
 

var box = ['chaoyi', 28, '计算机编程']; //字面量声明
alert(box.push('广州')); //数组末尾添加一个元素,并且返回长度
alert(box); //查看数组
alert(box.shift()); //移除数组开头元素,并返回移除的元素
alert(box); //查看数组

 
ECMAScript 还为数组提供了一个 unshift()方法,它和 shift()方法的功能完全相反。
unshift()方法为数组的前端添加一个元素。

var box = ['chaoyi', 28, '计算机编程']; //字面量声明
alert(box.unshift('广州','江苏')); //数组开头添加两个元素
alert(box); //查看数组
alert(box.pop()); //移除数组末尾元素,并返回移除的元素
alert(box); //查看数组

 
PS:IE 浏览器对 unshift()方法总是返回 undefined 而不是数组的新长度。
重排序方法
数组中已经存在两个可以直接用来排序的方法:reverse()和 sort()。
reverse() 逆向排序

var box = [1,2,3,4,5]; //数组
alert(box.reverse()); //逆向排序方法,返回排序后的数组
alert(box); //源数组也被逆向排序了,说明是引用
sort() 从小到大排序
var box = [4,1,7,3,9,2]; //数组
alert(box.sort()); //从小到大排序,返回排序后的数组
alert(box); //源数组也被从小到大排序了

 
sort 方法的默认排序在数字排序上有些问题, 因为数字排序和数字字符串排序的算法是一样的。我们必须修改这一特征,修改的方式,就是给 sort(参数)方法传递一个函数参数。
这点可以参考手册说明。

function compare(value1, value2) { //数字排序的函数参数
if (value1 < value2) { //小于,返回负数
return -1;
} else if (value1 > value2) { //大于,返回正数
return 1;
} else { //其他,返回 0
return 0;
}
var box = [0,1,5,10,15]; //验证数字字符串,和数字的区别
alert(box.sort(compare)); //传参

 
PS:如果要反向操作,即从大到小排序,正负颠倒即可。当然,如果要逆序用 reverse()
更加方便。
操作方法
ECMAScript 为操作已经包含在数组中的元素提供了很多方法。 concat()方法可以基于当前数组创建一个新数组。 slice()方法可以基于当前数组获取指定区域元素并创建一个新数组。
splice()主要用途是向数组的中部插入元素。

var box = ['chaoyi', 28, '广州']; //当前数组
var box2 = box.concat('计算机编程'); //创建新数组,并添加新元素
alert(box2); //输出新数组
alert(box); //当前数组没有任何变化
var box = ['chaoyi', 28, '广州']; //当前数组
var box2 = box.slice(1); //box.slice(1,3),2-4 之间的元素
alert(box2); //28,广州
alert(box); //当前数组

 
splice 中的删除功能:

var box = ['chaoyi', 28, '广州']; //当前数组
var box2 = box.splice(0,2); //截取前两个元素
alert(box2); //返回截取的元素
alert(box); //当前数组被截取的元素被删除

 
splice 中的插入功能:

var box = ['chaoyi', 28, '广州']; //当前数组
var box2 = box.splice(1,0,'计算机编程','江苏'); //没有截取,但插入了两条
alert(box2); //在第 2 个位置插入两条
alert(box); //输出

 
splice 中的替换功能:

var box = ['chaoyi', 28, '广州']; //当前数组
var box2 = box.splice(1,1,100); //截取了第 2 条,替换成 100
alert(box2); //输出截取的 28
alert(box); //输出数组

 

  • 大小: 4.9 KB
  • 大小: 4.5 KB
分享到:
评论

相关推荐

    第8章 对象和数组1

    3.对象中的方法 2.new 关键字可以省略 3.使用字面量方式创建 Object 4.属性字段也可以使用字符串星矢 5.使用字面量及传统复制方式 6.两种属性

    深入JAVA虚拟机第二版.pdf 目录

    第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句

    eloquent-[removed]口才JavaScript练习

    第4章:数据结构-对象和数组 范围的总和 反转数组 一个列表 深度比较 第5章:高阶函数 展平 母子年龄差异 历史预期寿命 每隔一段时间 第六章:物体的秘密生活 向量类型 另一个细胞 序列接口 第七章:电子生活 电子...

    深入java虚拟机

    第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与...

    深入Java虚拟机(原书第2版)及书中源代码

    第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与...

    C++入门经典(第9版) ([美]Walter Savitch著) 中文pdf完整扫描版[302MB]

    第8章 字符串和向量 第9章 指针和动态数组 第10章 定义类 第11章 类中的友元函数、重载操作符和数组 第12章 独立编译和命名空间 第13章 指针和链表 第14章 递归 第15章 继承 第16章 异常处理 第17章 模板 第18章 ...

    JavaScript权威指南(第五版)

     第7章 对象和数组  第8章 函数  第9章 类、构造函数和原型  第10章 模块和名字空间  第11章 使用正则表达式的模式匹配  第12章 脚本化Java 第二部分 客户端JavaScript  第13章 Web浏览器中的...

    JavaScript权威指南(第6版)(中文版)

    第7章对象和数组 第8章函数 第9章类、构造函数和原型 第10章模块和名字空间 第11章使用正则表达式的模式匹配 第12章脚本化Java 第二部分客户端JavaScript 第13章Web浏览器中的JavaScript 第14章脚本化浏览器窗口 第...

    MATLAB基础入门教程MATLAB使用详解全部PPT课件资料共26个章节.rar

    第8章 函数分析 第9章 数据分析 第10章 高级数值计算 第11章 符号计算 第12章 二维图形 第13章 三维图形 第14章 图形对象和句柄 第15章 MATLAB7.0程序设计 第16章 程序调试、优化和出错处理 第17章 图形用户界面...

    深入java虚拟机中文第2版

    第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与...

    《C++:程序设计原理与实践》

    第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入和输出 第10章 输入/输出流 第11章 定制输入/输出 第12章 一个显示模型 第13章 图形类 第14章 设计图形类 第15章 绘制函数图和数据图 第16章 图形...

    JavaScript编程精解

    全书一共12章:第1~3章介绍了JavaScript的基本语法,旨在帮助读者编写出正确的JavaScript程序,包含数字、算术、字符串、变量、程序结构、控制流程、类型、函数、对象和数组等最基础和最核心的内容;第4~7章讲解了...

    4320+MATLAB使用详解PPT.rar

     第8章 函数分析  第9章 数据分析  第10章 高级数值计算  第11章 符号计算 第四篇 MATLAB图形  第12章 二维图形  第13章 三维图形  第14章 图形对象和句柄 第五篇 MATLAB程序设计  第15章 MATLAB7.0程序设计...

    Java基础文档

    第8章 、 输入\输出流 21 第9章 、 基于SWING的图形用户界面的设计 21 第10章 、 Java中的网络编程 21 第11章 、 Java与数据库中的操作 21 第12章 、 Java Appplet 21 第13章 、 附录(Eclipse中快捷键) 21

    JAVA程序设计 课件

    第二章 基于数据类型和数组 第三章 运算符、表达式、数组 第四章 类与对象 第五章 继承、接口与泛型 第六章 字符串和正则表达式 第七章 常用实用类 第八章 线程 第九章 输入输出流 第十章 基于Swing的图形的用户界面...

    超爽的自学课件(java)

    &lt;br&gt;(8) 第8章:对象的容纳 对一个非常简单的程序来说,它可能只拥有一个固定数量的对象,而且对象的“生存时间”或者“存在时间”是已知的。但是通常,我们的程序会在不定的时间创建新对象,只有在程序运行...

    组合数学的算法与程序设计

    第八章 组合设计 8.1 问题的题出 8.2 魔方与魔和 8.3 拉丁方的构造 8.4 构造奇数阶正交拉丁方 习题八 第九章 线性规划 9.1 线性规划及其数学模型 9.2 单纯形法 9.3 对偶问题 9.4 整数规划 9.5 指派问题 习题九 第十...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    第8章实验指导2 第9章异常处理 第10章Java常用API 第11章Java IO操作 第12章多线程开发 第13章反射技术 第14章实验指导3 下篇UML 第15章UML入门 第16章用例图 第17章类图和对象图 第18章实验指导4...

Global site tag (gtag.js) - Google Analytics