数据类型(ES5 + ES6)

作者 Zwe1 日期 2018-03-22
数据类型(ES5 + ES6)

Javascript是一种动态语言,无需提前声明变量的类型,也可以使用同一个变量保存不同类型的数据。

需要指明类型的变量声明方式: int a; float b; char C; (C语言)

数据类型

Boolean, Null, Undefined, Number, String, Symbol(ES6) 和 Object。

基本数据类型都是不可修改的,对变量的重赋值并非操作原来的值。

Symbol

Symbol表示独一无二的值,是Javascript语言的第七种数据类型。

1
2
3
4
5
let s = Symbol('symbol');
typeof s;
// "Symbol"
s.toString();
// "Symbol('symbol')"

Symbole可以接受一个参数,表示对Symbole实例的区分。

ES6 Set和 Map

Set为类数组结构,是一种非重复类数组。
Map为键开放的对象结构。
typeof判断Set和Map为Object。

Set

Set数据结构类似于数组,但成员的值是不重复的唯一值。

1
2
3
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]

在为set赋值时,若直接传入一个数组,set会过滤数组中的重复性,重复的NaN也会被过滤掉。

1
2
3
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)];
// [3, 5, 2]

利用Set的不重复特性实现数组去重

WeakSet

与Set的两个区别

  1. WeakSet成员只能是对象。
  2. WeakSet是弱引用,会自动回收。

Map

类似于对象,允许“键”为各种类型的Hash结构数据。

1
2
3
4
5
6
7
8
9
10
11
const map = new Map();

const k1 = ['a'];
const k2 = ['a'];

map
.set(k1, 111)
.set(k2, 222);

map.get(k1) // 111
map.get(k2) // 222

变量k1和k2的值是一样的,但在Map结构中被视为两个键。可知,Map的键是和内存地址绑定的,只要内存地址不一样,就视为两个键。

WeakMap

与Map的区别

  1. 只接受对象作为键名(null除外)。
  2. WeakMap键所指向的对象,不计入垃圾回收机制。
    应用:为对象添加一些额外的说明,不造成引用。

常用API

字符串

String.substr(starts, ends); 字符串截取
String.slice(starts, ends); 字符串截取
String.split(spliter); 将字符串以匹配的模式分割为数组。
String.indexOf(param); 查找匹配值的起始序列号

数组

Arr.slice(starts, ends); 数组截取,返回新数组
Arr.splice(starts, ends, new1, new2, …); 可以修改原始数组,从指定位置开始删除若干元素,从该位置插入若干元素
Arr.concat(arr); 数组连接,返回新数组
Arr.join(joiner); 使用连接符将数组连接为字符串
Arr.indexOf(param); 查找匹配值的下标
Arr.push(); 尾部入栈
Arr.pop(); 尾部出栈
Arr.unshift(); 头部入栈
Arr.shift(); 头部出栈
Arr.sort(func); 数组排序,参数可选,默认升序
Arr.reverse(); 数组反转
Arr.from(set); 将Set结构转为数组。

Set

S.add(value); 添加某个值
S.delete(value); 删除某个值
S.has(value); 是否含有某值
S.clear(); 清除所有值

Map

m.size; 返回Map结构的成员总数
m.set(key, value); 设置键名为key,键值为value
m.get(key); 获取对应键为key的值。