symbol
es5中基本数据:null undefined number string boolean
es6新增数据:symbol 生成一个独一无二的数据
let s1 = Symbol(100);
let s2 = Symbol(100);
console.log(s1, s2, s1 == s2); //Symbol(100) Symbol(100) false
var a = 100;
a.age = 20; //隐性将a转换为一个对象,执行完立即释放
console.log(a.age); //undefined 上一个释放了,这个是重新创建的没有值
Map
es6出的新数据容器:数据是二维数据的形式,可以存任何数据
Map没有创建的语法糖
var m1 = new Map([[1, 2]], [[[1, 2, 3], 2]]); //初始化 第一个值为key 后面为value
console.log(m1); //Map(1) {1 => 2}
取数据
console.log(m1.get(1)); //2 只能通过get取值 注意引用数据取值 不是一个空间会取不到
存数据
console.log(m1.set("名字", "张三")); //Map(2) {1 => 2, '名字' => '张三'}
其他方法
console.log(m1.size); //2 数据的长度
console.log(m1.delete(1)); //true 删除元素 返回布尔值
m1.clear(); //数据全部清除
console.log(m1); //Map(0) {size: 0}
Set
var s1 = new Set();
s1.add(100); //添加元素
s1.add("123"); //添加元素
console.log(s1); // {100, '123'}
s1.forEach(function (el) {
console.log(el);
}); //可以通过forEach遍历取数据
var arr = [1, 2, 3, 5, 5, 5];
var s2 = new Set(arr);
console.log(s2); //{1, 2, 3, 5} 遍历数组 将数组中的元素通过调用add添加进集合中并进行去重
console.log(Array.from(s2)); //[1, 2, 3, 5] 取出容器中的所有数据 然后存入新数组中返回
扩展运算符
var arr = [1, 2, 3, 4, 5];
console.log(...arr); //1 2 3 4 5 将数组展开 执行的取出操作 元素为引用对像时 不会重新创建
购物车案例 只有大概思路
var mycar = {
data: new Map(),
clear: function () {
this.data.clear();
},
jianshao: function (id) {
//减少 通过id 找到对应的count 进行减少
let obj = this.data.get(id);
if (obj) {
obj.count--;
if (obj.count <= 0) {
//如果菜品数量为0 就将其删除
this.data.delete(id);
}
}
},
add: function (id) {
let obj = this.data.get(id);
if (obj) {
obj.count++;
this.data.set(id, obj);
}
},
total: function () {
var result = 0;
this.data.forEach(function (el) {
console.log(el);
result += el.count * el.price;
});
return result;
},
network: function () {
var jiashuju = [
{
id: 001,
title: "鱼香肉丝",
price: 18,
count: 1,
},
{
id: 002,
title: "东坡肉",
price: 28,
count: 1,
},
{
id: 003,
title: "米饭",
price: 2,
count: 2,
},
];
var self = this;
jiashuju.map(function (el) {
self.data.set(el.id, el);
});
},
};
mycar.network();
mycar.add(001);
mycar.jianshao(002);
console.log(mycar.data);
var re1 = mycar.total();
console.log(re1);
mycar.clear();
console.log(mycar.data);