js数据类型
Map和Set
map
Key-键值对形式,类似哈希表
new Map()
—— 创建 map。map.set(key, value)
—— 根据键存储值。map.get(key)
—— 根据键来返回值,如果map
中不存在对应的key
,则返回undefined
。map.has(key)
—— 如果key
存在则返回true
,否则返回false
。map.delete(key)
—— 删除指定键的值。map.clear()
—— 清空 map。map.size
—— 返回当前元素个数。
如果要在 map
里使用循环,可以使用以下三个方法:
map.keys()
—— 遍历并返回所有的键(returns an iterable for keys),map.values()
—— 遍历并返回所有的值(returns an iterable for values),map.entries()
—— 遍历并返回所有的实体(returns an iterable for entries)[key, value]
,for..of
在默认情况下使用的就是这个。
1 | let map = new Map(Object.entries(obj));//从obj对象创建map |
Set
每个键只出现一次
它的主要方法如下:
new Set(iterable)
—— 创建一个set
,如果提供了一个iterable
对象(通常是数组),将会从数组里面复制值到set
中。set.add(value)
—— 添加一个值,返回 set 本身set.delete(value)
—— 删除值,如果value
在这个方法调用的时候存在则返回true
,否则返回false
。set.has(value)
—— 如果value
在 set 中,返回true
,否则返回false
。set.clear()
—— 清空 set。set.size
—— 返回元素个数。
Map
中用于迭代的方法在 Set
中也同样支持:
set.keys()
—— 遍历并返回所有的值(returns an iterable object for values),set.values()
—— 与set.keys()
作用相同,这是为了兼容Map
,set.entries()
—— 遍历并返回所有的实体(returns an iterable object for entries)[value, value]
,它的存在也是为了兼容Map
。
另
obj = Array.from(iteratable)可以从一个可迭代对象返回一个数组
WeakMap and WeakSet(弱映射和弱集合)
WeakMap
- 不能用原始值作为键
- 假如用对象作为键,但是对象被设为null时map里的键会自动删除
使用案例:计数某人来的次数,当这个人退出时清空他的数据/清除缓存
WeakSet
- 不能添加原始值
- 不支持size和keys方法,不可迭代
Object.keys,values,entries
- Object.keys(obj)—— 返回一个包含该对象所有的键的数组。
- Object.values(obj) —— 返回一个包含该对象所有的值的数组。
- Object.entries(obj) —— 返回一个包含该对象所有 [key, value] 键值对的数组。
区别:(为了灵活性)
1 | let user = { |
Object.keys(user) = ["name", "age"]
Object.values(user) = ["John", 30]
Object.entries(user) = [ ["name","John"], ["age",30] ]
转换对象
对象没有map方法,使用需要先转换成数组再转回来
1 | let prices = { |
解构赋值
语法
let {prop : varName = default, ...rest} = object
这表示属性 prop
会被赋值给变量
varName
,如果没有这个属性的话,就会使用默认值
default
。
没有对应映射的对象属性会被复制到 rest
对象。
1 | // 我们有一个存放了名字和姓氏的数组 |
剩余的 ‘…’
1 | let [name1, name2, ...rest] = ["Julius", "Caesar", "Consul", "of the Roman Republic"]; |
默认值
1 | let [firstName, surname] = []; |
Date
new Date(year, month, date, hour, minute, second, millisecond)
-
获取年份(4 位数)
-
获取月份,从 0 到 11。
-
获取当月的具体日期,从 1 到 31,这个方法名称可能看起来有些令人疑惑。
getHours(),getMinutes(),getSeconds(),getMilliseconds()
获取相应的时间组件。
-
获取一周中的第几天,从
0
(星期日)到6
(星期六)。第一天始终是星期日,在某些国家可能不是这样的习惯,但是这不能被改变。
测量函数运行时间
1 | let start = Date.now();//获得起始 |
1 | function bench(f) { |
JSON方法
JSON.stringify()
将对象转换为 JSON。JSON.parse()
将 JSON 转换回对象。