愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

Javascript学习总结——数组、对象、Map、Set、字符串

一、数组

1、定义方式1:var arr = [1, 3.14, "Hello", null]
2、定义方式2:var arr = new Array(1, 3.14, "Hello", null)
3、访问:索引访问,如 arr[0] ,访问权限为:可读可写
4、arr.length可以取得数组的长度,若改变arr.length的值,则会导致数组大小的变化。如

var arr = [1, 2, 3];
arr.length = 5; // 此时arr变为[1, 2, 3, undefined, undefined]
arr.length = 2; // 此时arr变为[1, 2]

5、若越过当前数组的最大索引进行赋值操作,也会导致arr的大小发生变化,如上述例子中,执行 arr[5] = "Hello" 后,arr.length将变为6
6、可以使用 arr.indexOf(someString) 来搜索arr中值为someString的数组元素所在位置,如果值不存在,则返回-1,如

arr.indexOf(3); // 返回2
arr.indexOf(0); // 返回-1

7、arr.slice(a, b) 截取arr中索引范围[a, b)区间的元素并生成新的数组返回,若不传递参数b,则b相当于arr.length,当a、b参数均不传递时,则起到复制数组的作用
8、arr.push(anyObject [, anyObject]) 在数组末尾添加一或多个元素(相当于入栈),arr.pop() 从数组末尾删除元素并返回(相当于出栈),当数组为空的时候,会返回undefined
9、arr.unshift() 在数组的头部添加元素,而 arr.shift() 删除数组头部的元素并返回
10、arr.sort() 返回排序后的数组(升序)
11、arr.reverse() 返回反转后的数组
12、arr.splice(index, howmany, item1 ... itemX) 是对原数组进行修改的利器,它可以删除指定位置的数组,也可以在指定位置添加数组。其中,index表示要删除的元素索引,howmany表示要删除元素的个数,item1 ... itemX为要在删除的元素前面加入的元素,对于数组 var arr = ['A', 'B', 'C', 'D'] ,举例如下(假设语句不存在先后顺序上的关联):

arr.splice(1, 2); // 从索引1开始删除2个元素(即B和C),仅删除,不作添加
arr.splice(1, 2, "Hello"); // arr变为['A','Hello','D']
arr.splice(1, 0, "Hello"); // 不删除原有元素,在索引1的位置加入"Hello",即arr变成['A', 'Hello', 'B', 'C', 'D']

13、arr.concat(anotherArr)可以把arr和anotherArr连接成为一个新的数组并返回,同时有下面的特性:

var arr = ['A', 'B', 'C'];
arr.concat([1, 2, 3]); // arr为['A', 'B', 'C', 1, 2, 3]
arr.concat(1, 2, 3); // arr为['A', 'B', 'C', 1, 2, 3],和上面等效
arr.concat([1], [2, 3]); // 和上面等效
arr.concat([[1]], [2, 3]); // 则arr变为['A', 'B', 'C', [1], 2, 3]

14、arr.join(sign)把数组中的元素用sign参数指定的符号连接起来,如果元素不是字符串,将先转为字符串后操作


二、对象

1、定义:

var person = {
    name: "RuphiLau",
    age : 21,
    city: "Quanzhou",
    'live-in': "Fuzhou"
}

其中,对象的键都是字符串类型,对象的键又称为对象的属性
如果键名不是有效的变量标识符,则应该用''包围起来
2、访问:person.name 或者 person['name'],访问不存在的属性返回undefined,但是如果对不存在的属性进行赋值操作,则将添加进入对象,如:

person.lover = 'KPP'; // 则相当于person中多了lover: "KPP"

3、可以用 delete object.xxx 删除object对象中以xxx为键名的属性
4、可以用 'xxx' in object 判断object对象中是否有xxx这一属性(单引号包围起来是必须的!),不过,如果xxx是对象继承而来的属性,则它也会为true(若要判断是否为自身拥有的属性,则用 object.hasOwnProperty()


三、Map

javascript中的对象类似于其他语言中的Map/Dictionary数据结构,但是默认的对象类型限制键的类型只能是字符串,而其实,用数值作为键名也是合理的,故ES6中引入了Map这一类型以解决该问题

1、初始化Map:var m = new Map(),或者用二维数组初始化,如 var m = new Map([[key1, value1], [key2, value2], ...])
2、Map的操作:

  • 2.1 m.set(key, value),新增或修改键名为key的键值为value
  • 2.2 m.get(key),获取键名为key的键值
  • 2.3 m.delete(key),删除键名为key的键值对


四、Set

Set是ES6新增的数据结构,它的概念和数学中的“集合”一致,最重要的一点是满足互异性,即采用Set的数据结构中,值是不会重复的

1、初始化Set:var s = new Set();,或者 var s = new Set([1, 2, 3, 4])
2、添加元素:s.add(newValue)
3、删除元素:s.delete(oldValue)


四、字符串

1、ASCII字符用 \x## 的形式表示,如 \x41
2、Unicode字符用 \u#### 的形式表示
3、ES6标准支持多行字符串,即以 ` 包围起来的字符串,如

var a = `这是
一个
多行的字符串`;

4、ES6标准支持模板字符串,用法如下:

var name = "RuphiLau";
var age  = 21;
var text = `${name}的年龄为${age}`;

5、字符串常用操作

  • 5.1 用str[index]来访问字符串中指定位置的字符,但是是 只读 的,如
    var str = "Hello";
    var somechar = str[4]; // returns 'o'
    
  • 5.2 str.toUpperCase() 转为大写
  • 5.3 str.toLowerCase() 转为小写
  • 5.4 str.indexOf(string) 搜索在str中出现string的位置(返回的位置从0开始),如果没有找到,则返回-1
  • 5.5 str.substring(a [, b]) 截取字符串,截取str中[a, b)区间的字符,如果不传递b参数,则从a位置一直截取到字符串的结尾