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>