Object

目前为止,大多数引用值都使用Object对象。

创建Object对象有两种方式:

  1. 使用new关键字。
1
2
3
let person = new Object();
person.name = "Nicholas";
person.age = 29;
  1. 使用对象字面值。
1
2
3
4
let person = {
name: "Nicholas",
age: 19
};

一般来说,推荐使用第二种方式,更加直观,也有封装的感觉。

调用函数时,函数的参数也可以使用这种格式:

1
2
3
4
5
6
7
8
function display(args){

}

display({
name: "abc",
age: 19
});

使用中括号访问Object

默认情况下,面向对象使用点(.)访问对象成员。

在JavaScript中,也支持使用中括号进行访问。

类似Python中的map。

1
2
console.log(person.name);
console.log(person["name"])

Array

除了Object,最常用的就是Array类型。

与其它语言不同的是,JavaScript中的数组可以保存不同类型元素。

并且,Array是可以不断变长的动态数组。

创建数组

  1. 使用Array构造函数。
1
2
3
let colors = new Array();
let colors = new Array(10);
let colors = new Array("red", "blue", "green");
  1. 使用数组字面值。
1
2
3
let name = [];
let colors = ["red", "blue", "green"];
//不会调用Array构造函数
  1. 使用from静态方法。

Array.from将类数组结构(任何可迭代对象)转换为数组。

1
console.log(Array.from("Matt")); //['M', 'M', 't', 't']

需要注意的是:from方法实现的是浅复制。

  1. 使用of静态方法。

Array.of可以把一组参数转换为数组。

1
console.log(Array.of(1, 2, 3, 4));	//[1, 2, 3, 4]

数组索引

可以通过中括号内的索引值访问数组,如果访问了一个不存在索引,数组会变长到索引值+1。

1
2
3
let color = ["red", "blue"];
console.log(color[0]); //red
color[2] = "yellow"; //增加第三项

数组元素是数量保存在length属性中,返回一个大于等于0的数。

length即可读也可写,可以通过它删除数组末尾的元素。

1
2
3
let color = ["red", "blue"];
console.log(color.length); //2
color.length = 1; //删除元素blue

数组迭代器

Array提供了三个静态方法:keys()、values()、entries()。

1
2
3
4
5
const a = ["foo", "bar", "baz", "qux"];
for(const [idx, element] of a.entries()){
alert(idx);
alert(element);
}

数组排序

数组提供了reverse和sort两个方法。

1
2
3
let a = [5, 10];
console.log(a.reverse()); [10, 5]
console.log(a.sort()); [10, 5]

sort默认是从小到大排序,需要注意的是,sort比较的是比较元素的字符串形式。

为了能够灵活的排序,sort方法允许接收比较函数。

比较函数接收两个参数:

  • 如果第一个参数应该排在前面,就返回负值。
  • 如果第一个参数应该排在后面,就返回正值。
  • 如果两个元素相等,返回0。
1
2
3
4
5
6
7
8
9
10
11
12
13
function cmp(value1, value2){
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}

let values = [0, 1, 5, 10, 15];
values.sort(cmp);
alert(values); //0, 1, 5, 10, 15

Map

Map是ES6的新增特性,元素使用键值对的形式存储。

Map和其它语言的映射基本一致,不再详细讲解,可自行查阅资料。

基本API

  1. 创建Map

使用new关键字和Map构造函数创建空映射:

1
const m = new Map();

如果想在创建的同时初始化,可以给Map构造函数传入一个可迭代对象。

1
2
3
4
5
6
const m1 = new Map(){
["key1", "val1"],
["key2", "val2"],
["key3", "val4"]
}];
alert(m1.size); //3
  1. 添加键值对

可以使用set方法添加/修改键值对。

  1. 删除键值对。

可以使用delete/clear方法删除键值对。

Set

Set也是ES6中新增的一种集合类型,在很多方面算是加强版的Map。

同样,也不再详细讲解,有兴趣可自行查阅资料。

基本API

  1. 创建集合

使用new关键字和Set构造函数创建空集合:

1
const m = new Set();

创建的同时初始化:

1
const s1 = new Set({["val1", "val2", "val3"]});
  1. 新增元素

可以使用add方法增加新值。

  1. 删除元素

可以使用delete/clear方法删除元素。