Se、Map、 Proxy、Symbol总结
Set
是ES6中新增的一个数据结构。可以理解为一个内容不可重复的数组 + 初始化
常用方法和属性
add(item) 用于向set对象内添加一项
item 被添加的项
注: 如果添加的是已经存在的内容 则添加失败
var set = new Set([0, 1, 2, 3, {}]);
set.add(6); // 添加成功
set.add(-0); // 添加失败
delete(item) 用于删除一项
被删除的项
注: 如果是引用类型 则必须地址一致才会删除成功
set.delete(1);
clear() 清空
set.clear();
has(item) 判定是否存在
set.has(1); // true | false
forEach(fun) 循环、迭代方法
fun(value, index,self) 函数 函数有三个参数
value 成员
index索引
self set对象本身
var set= new Set();
map.forEach(function(value, index, self) {
console.log(value, index,self);
});
for of :ES6中新增的专门用于循环迭代器的语法
for (var i of set) {
console.log(i)
}
Map
Map可以理解为一个超级对象
普通的对象: key必须是字符串
Map对象: key可以是任意的数据类型
初始化:
var map = new Map();
常用方法和属性
set(key, value) 设置
key 存储的键名
value 存储的值
var map = new Map();
map.set("a", "a");
map.set(1, 1);
map.set(undefined, undefined);
map.set(false, false);
map.set(null, null);
map.set({}, {});
map.set([], []);
map.set(function() {}, function() {});
get(key) 根据key获取value
返回值 键值
var map = new Map();
map.set(1, 1);
map.get(1); // 1
delete(key) 根据key删除属性
var map = new Map();
map.delete(1);
has(key) 根据key判定是否存在键值对
返回值 布尔值 true表示存在 false表示不存在
var map = new Map();
map.has(1); // false
forEach(fun) 循环、迭代方法
fun(value, index,self) 函数 函数有三个参数
value 成员
index索引
self map对象本身
var map = new Map();
map.forEach(function(value, index, self) {
console.log(value, index,self);
});
for of :循环map成员
for (var i of map) {
console.log(i);
}
Proxy
代理是ES6中新增的构造函数但是它的特点是实例自身没有任何属性和方法。
Proxy是一个代理构造函数。
<script>
// 代理是ES6中新增的构造函数 但是它的特点是 实例自身没有任何属性和方法
// Proxy 是一个代理构造函数
var p = (function () {
var star = {
name: '刘德华',
age: 58,
sex: "男"
}
var p = new Proxy(star, {
// get是一个函数 它规定了 通过代理对象读取目标对象属性时的处理方案
get(target, prop, self) {
console.log("通过代理对象访问的");
if (prop === "age") {
return 0;
}
return target[prop];
},
// set是一个函数 它规定了 通过代理对象目标对象属性时的处理方案
set(target, prop, value, self) {
console.log("通过代理对象设置的");
if (prop === "age") {
return;
}
if (prop === "sex") {
return "男";
}
target[prop] = value;
}
})
return p;
})();
// console.log(p.name);
// console.log(p.age);
p.name = "马德华";
p.sex = "女";
</script>
Symbol
Symbol是ES6中新增的种数据类型
JS中的数据类型:现在有七种 string、 number、 boolean、 null、undefined、 symbol、 object
Symbol是一种符号类型表示独一无二
var s = Symbol();
console.log(typeof s); // symbol
console.log(typeof ""); // string
console.log(typeof 1); // number
console.log(typeof null); // object 一个公认的bug
console.log(typeof undefined); // undefined
console.log(typeof true); // boolean
console.log(typeof []); // object
console.log(typeof {}); // object
console.log(typeof function() {}); // function
console.log(typeof new Date()); // object
console.log(typeof new RegExp()); // object