对象
JavaScript中的复杂数据类型只有一种,即对象(object)。
{} 花括号,用来定义一个对象;
对象由花括号包围。在括号内部,属性以键值对的形式,如 key : value 来定义,又称属性名和属性值。其中,属性名可以是标识符,字符串,或是数值.属性值可以是任意的数据值,对象或者函数。属性间由逗号分隔。例如:
var student={name:'Tom', number:123,age:18};
上面例子中的对象 (student) 有三个属性:name、number以及 age。
空格和属性间的换行无关紧要。例如可以写成:
var student = {
name : 'Tom',
number :123
age :18
};
对象属性值有两种获取方式:
name = student.name;
或
name = student['name'];
这两种方式都可以将'Tom'取出来赋给变量name。在取值方面,两者是完全等价的。 唯一的区别在于使用场景,后者可以用于动态的取值,我可以通过变量传递我要访问的属性名。
数组
事物对象(object)可以由一个或者多个属性组成(像数学中的"集合")。比如学生Tom期末成绩的数据可以详细地用对象(object)表示为:
var grades ={ Maths : 80, Chinese : 82, Biology : 79, Physics : 86};
当我们仅需要记录成绩的数值时,对象的另一种格式 "数组(array)"就派上用场了。
var scores = [ 80, 82, 79, 86];
如上所示,数组由方括号包围。在括号内部,数据以独立值的形式 value 来定义。数据值之间由逗号分隔。比如课程名的数组:
var courses = [ "Maths", "Chinese", "Biology", "Physics"];
取courses数组中第一个值的方法是:
var course = courses[0]; //给course赋值为"Maths"
由于数组的下标(序号)是从零开始的,所以第一个项目是[0],第二个是[1],以此类推。
数组的创建
- 使用Array构造函数
let colors = new Array();
如果知道数组要保存的项目的数量,也可以给构造函数传递该数量,而该数量会自动变成length属性的值。例如,下面的代码将创建length的 值为10。
let colors = new Array(10);
也可以向Array构造函数传递数组中应包含的项。以下代码创建了一个包含4个字符串值的数组。
let colors = new Array("red","pink","blue","green");
在使用Array构造函数时也可以省略new操作符。如下面的例子所示:
let colors = Array();
let colors = Array(3)
- 使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开,如下所示:
let colors = ["red","pink","blue","green"]; //创建一个包含4个字符串的数组
let name = [ ]; //创建一个空数组
let number = [1,2,]; //不要这样!这样会创建一个包含2或3 项的数组
let options = [,,,,,]; //不要这样!这样会创建年一个包含5或6项的数组
数组的属性
- 在读取和设置数组的值时,要使用方括号并提供相应的基于0的数字的索引,如下所示:
let colors = ["red","pink","blue","green"]; //定义一个字符串数组
console.log(colors[0]); //打印第一项
colors[2] = "white" //修改第三项
colors[4] = "black" //新增第五项
方括号中的索引表示要访问的值。如果索引小于数组中的项数,则返回对应的值。设置数组的值也使用相同的语法,对会替换指定位置的值。如果设置某个的索引超过了数组现有项数,数组就会自动增加到该索引值加1的长度。
- 数组的项数保存在其length属性中,这个属性始终会返回0或更大的值,如下面的例子:
let colors = ["red","pink","blue","green"];
let name = [];
console.log(colors.length); //4
console.log(name.length); //0
数组的length属性很有特点--它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。如下所示:
let colors = ["red","pink","blue","green"];
colors.length = 3;
console.log(colors[3]); //undefined
将其length属性设置为3会移除最后一项,结果在访问colors[3]就会显示undefined。如果将其length属性设置为大于数组项数的值,则新增的每一项都会取得undefined的值。
利用length属性也可以方便地在数组末尾添加新项,如下所示:
let colors = ["red","pink","blue","green"];
colors[colors.length] = "brown";
由于数组最后一项的索引始终都是length-1,因此下一项的新位置就是length。
数组和对象的区别
- 数组两端由方括号包围,而不是对象两端的花括号。
- 数组内的数据是一个个独立的值(value),由逗号隔开,而不是对象中的属性键值对形式( key:value)。