const,常量声明者
- 01-只在当前的代码块有效
- 02-做用域不会被提高
- 03-在一个做用域里不能重复声明
- 04-申明的常量必须当即赋值
- 05能够改变堆区的对象内容,不能修改栈区的地址(和其余语言如Java相似)

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
/* //01-只在当前的代码块有效
{
const a = "zhangsan"
}
console.log(a);//报错*/
//02-做用域不会被提高
//03-在一个做用域里不能重复声明
/* //04-申明的常量必须当即赋值
{
const name;
name = "zhangsan";
console.log(name);
}*/
{
const obj = {name : "张三"};
console.log(obj);
obj.name = "李四";
console.log(obj);
}
</script>
</body>
</html>
set,无重集合
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
//1.建立集合
let set = new Set(['张三','李四','李四']);
console.log(set);
//2.属性
console.log(set.size);
//03-四个方法 add delete has clear
set.add('hehe').add('dada');
console.log(set);
console.log(set.delete('dada'));
console.log(set);
console.log(set.has('张三'));
console.log(set.has('张三1'));
set.clear();//这个就返回值了
console.log(set);
</script>
</body>
</html>
map,键值对,弥补对象的局限性
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
/* //对象的局限性
let obj1 = {a:1},obj2 = {b:2},obj = {};
console.log(obj);
obj.name = '张三';
obj[obj1] ="天空";
console.log(obj);
obj[obj2] = "大海"
console.log(obj);//被覆盖
//缘由就是内部把键作了字符串处理化
console.log(obj1.toString());
console.log(obj2.toString());
console.log(obj1.toString() === obj2.toString());//true*/
//引入Map
//1.建立一个Map
let obj1 = {a:1},obj2 = {b:2},obj = {};
const map = new Map([
['name','张三'],
['age','18'],
['sex','男'],
[obj1,'今每天气很好'],
[obj2,'适合敲代码'],
['age','50'],//覆盖前面的18
[[1,2],'hh'],
]);
console.log(map);
console.log(map.size); //6 一样的键会被覆盖
//set和get
//set新增长键值对
map.set('friends',['赵六','王五']).set(['dog'],'小花');
//set获取
console.log(map.get('name'));
console.log(map.get(obj1));
//delete ,经过键删除对
map.delete(obj1)
console.log(map);
//has 是否存在该键
console.log(map.has(obj1)); //false
console.log(map.has(obj2)); //true
//clear 清空
//keys,values,entries
console.log(map.keys());
console.log(map.values());
console.log(map.entries());//获取键值对
//遍历
map.forEach(function (value,key) {
console.log(key + ":" + value);
})
//注意事项,对象都为空时,不会被覆盖,由于在堆区新开的对象地址都是不同的
map.set({},'hahaha');
map.set({},'hehehehe');
console.log(map);
console.log({} === {});//false
</script>
</body>
</html>
Symbol,解决字符串命名冲突问题

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>06-Symbol</title>
</head>
<body>
<script>
/* //1.定义
let str1 = Symbol();
let str2 = Symbol();
console.log(str1 === str2);
console.log(typeof str1);
console.log(typeof str2);*/
/* //2.描述
let str3 = Symbol("name");
let str4 = Symbol("name");
console.log(str3);
console.log(str4);
console.log(str3 === str4);*/
//3.对象的属性名
const obj = {};
obj.name = 'zhangsan';
obj.name = 'lisi';
obj[Symbol('name')] = 'zhangsan';
obj[Symbol('name')] = 'lisi';
console.log(obj);
</script>
</body>
</html>