javaScript 基础知识汇总(八)
1、Map Set WeakMap 和WeakSet
Map
是一个键值对的集合,主要的方法包括:
new Map() 创建Map
map.set(key,value) 根据键(key)存储值(value).
map.get(key) 根据键返回值,如果map中该值不存在,返回undefined
map.has(key) 如果键值存在,返回true,否则返回false
map.delete(key) 移除该键的值
map.clear() 清空map
map.size 返回当前元素个数
1 let map = new Map(); 2 3 map.set('1', 'str1'); // 字符串作为 key 4 map.set(1, 'num1'); // 数字作为 key 5 map.set(true, 'bool1'); // 布尔值作为 key 6 7 // 还记得普通对象 Object 吗?它将会把所有的键转化为字符串类型 8 // 但是 Map 将会保留键的类型,所以下面这两个是不同的: 9 alert( map.get(1) ); // 'num1' 10 alert( map.get('1') ); // 'str1' 11 12 alert( map.size ); // 3
将Object转化为Map
通过一个方法Object,entries(obj),它可以返回一个对象的键值对数组,如下
1 let map = new Map(Object.entries({ 2 name: "John", 3 age: 30 4 }));
遍历Map
1 let recipeMap = new Map([ 2 ['cucumber', 500], 3 ['tomatoes', 350], 4 ['onion', 50] 5 ]); 6 7 // 迭代键(vegetables) 8 for (let vegetable of recipeMap.keys()) { 9 alert(vegetable); // cucumber, tomatoes, onion 10 } 11 12 // 迭代值(amounts) 13 for (let amount of recipeMap.values()) { 14 alert(amount); // 500, 350, 50 15 } 16 17 // 迭代键值对 [key, value] 18 for (let entry of recipeMap) { // 和 recipeMap.entries() 一样 19 alert(entry); // cucumber,500(等等) 20 }
recipeMap.
forEach
(
(
value
,
key,
map)
=>
{
alert
(
`
${
key}
:
${
value}
`
)
;
// cucumber: 500 等等
}
)
;
Set
Set 是一个值得集合,这个集合中的所有的值仅出现一次
主要方法包括:
new Set() 创建Set,利用数组创建是可选的(任何迭代对象都可以)
set.add(value) 添加值,返回set本身
set.delete(value) 删除值,如果该value在调用方法的时候存在则返回true,否则返回false。
set.has(value) 如果set中存在该值则返回true,否则返回false。
set.clear() 清空set
set.size 元素的个数
Set 迭代
for ... of 或者 forEach
1 let set = new Set(["oranges", "apples", "bananas"]); 2 3 for (let value of set) alert(value); 4 5 // 和 forEach 相同: 6 set.forEach((value, valueAgain, set) => { 7 alert(value); 8 });
WeakMap 和 WeakSet
WeakMap
仅有如下方法:
weakMap.get(key)
weakMap.set(key, value)
weakMap.delete(key, value)
weakMap.has(key)
WeakSet同理
这两者的键必须是对象
1 let weakMap = new WeakMap(); 2 3 let obj = {}; 4 5 weakMap.set(obj, "ok"); // 运行正常(对象作为键) 6 7 weakMap.set("test", "Whoops"); // 错误,因为“test”是原始类型
2、Json 方法
Json.stringify 将对象转换为json 完整语法:let
json =
JSON
.
stringify
(
value[
,
replacer,
space]
)
Json.parse 将Json 转换为对象 语法:let
value =
JSON
.
parse
(
str[
,
reviver]
)
;
let student = { name: 'John', age: 30, isAdmin: false, courses: ['html', 'css', 'js'], wife: null }; let json = JSON.stringify(student); alert(typeof json); // we've got a string! alert(json); /* JSON-encoded object: { "name": "John", "age": 30, "isAdmin": false, "courses": ["html", "css", "js"], "wife": null } */
1 // a number in JSON is just a number 2 alert( JSON.stringify(1) ) // 1 3 4 // a string in JSON is still a string, but double-quoted 5 alert( JSON.stringify('test') ) // "test" 6 7 alert( JSON.stringify(true) ); // true 8 9 alert( JSON.stringify([1, 2, 3]) ); // [1,2,3]
1 // stringified array 2 let numbers = "[0, 1, 2, 3]"; 3 4 numbers = JSON.parse(numbers); 5 6 alert( numbers[1] ); // 1
1 let user = '{ "name": "John", "age": 35, "isAdmin": false, "friends": [0,1,2,3] }'; 2 3 user = JSON.parse(user); 4 5 alert( user.friends[1] ); // 1