保持对代码的热爱,并保存怀疑态度
变量声明关键字(基础功能都是赋值)
let
1.全局变量不会绑定到window对象
2.权重不会提升
3.不允许重复声明
4 块级作用域:只要是花括号就是作用域(写在花括号里面)
5.暂时性死区
const 同let, const声明的是常亮,声明时立即赋值,之后再也不能修改其实const不允许修改的是地址,可以改值
也就是说变量声明了就不能再重复声明,对象数组复杂数据类型可以更改值
// let和const的使用场景:如非特殊需要,所有的var都可以改成let
// 如果需要声明一个再也不会被改变的变量,使用const
解构赋值
数组和字符:按照从左向右的顺序,依次解构,变量多了就undefined
let arr = [3,4,5,6];
let [abc,age,num,aec,qwe] = arr;
console.log(abc);
数组的话就是语义化会更好
对象的解构赋值
// var obj = {
// name:“admin”,
// sex:1,
// age:18
// }
// var name = obj.name
// var {sex,age,name} = obj;
// 按照键名一一对应,不存在的键名,为undefined
应用场景
function fn(){
return {
year:2020,month:12,date:31
}
}
var {year,month,date} = fn();
console.log(year,month,date);
可以直接通关键取值
也可传参的时候通过解构赋值来取每个值
// function fn([a,b,c,d,e]){}
// var arr = [2,3,4,5,6]
// fn(arr)
// 快速交换两个变量的值
// var a = 10;
// var b = 20;
// var [a,b] = [b,a]
箭头函数
-
- 不能直接存在,必须作为值存在
- 语法极简
- 当有且只有一个形参时,可以省略小括号
- 当有且只有返回语句时,可以省略return关键字和花括号
- 伤害了代码的可读性
- 当有且只有返回语句,返回的是对象时,要么不能省略花括号和return,要么将对象使用小括号包裹起来
- 箭头函数没有自己的this,内部的this会自动使用外层this
- 箭头函数不能被new执行
使用场景
- 回调函数
- 返回值
- 等等小范围的使用
- arr.sort((a,b)=>a-b)
ES6对字符的新增
-
U编码 - 一组4位的十六进制
- 对于非常用字符,超过69904数量的字符,采取两组4位的十六进制
- ES6提出使用一组5位的十六进制表示原本需要两组4位的十六进制表示的u编码
- 一组5位的十六进制表示的u编码,需要将5个十六进制放在花括号中才能解析:"\u{20BB6}"
- 因为提供了新的表示方式,转换方法对应升级
- 字符转编码:str.codePointAt()
- 编码转字符:String.fromCodePoint(编码)
- 新方法可以替代老方法转换所有字符
-
新增了字符的方法
-
新增了字符串模板(字符串的表示方式和拼接方式)
- 反引号
- 在反引号内使用 变 量 拼 接 ‘ {变量}拼接 ` 变量拼接‘{}`
展开运算符
-
…符 直接展开 ,如果多维的话两个一起展开,直接变成一维
-
类似于解构赋值,展开复杂数据
-
数组和对象
// var arr = [“hello”,2,3,4,5,“world”];
// console.log(arr);
// console.log(arr[0], arr[1], arr[2]);
// console.log(…arr);
// // alert(…arr);
// var bigArr = [1,2,3];
// var list = […bigArr, …arr];
// var arr = [34,56,87,25,69];
// ES6中取数组的最大或最小值
// console.log(Math.max(…arr));
// ES5中取数组的最大或最小值
// console.log(Math.max.apply(null, arr)); 通过this指向的第二个参数值来取值
// ES3中取数组的最大或最小值
// 先排序,取第一个或最后一个
新增的数据类型 - Symbol
- Symbol是一种新的数据类型,特点类似于字符
- 创建:var s = Symbol(变量)
- 一旦创建,不可更改,不与任何数据相同,自身是相等的
- Symbol用来做标记量(字典量)
- 场景:固定的不可被改变的标记量
新增的数据结构
- set
.Set 无重复列表类型
特点:
1.没有下标,不是按照下标存储,但是是有序的,因此不能使用下标循环遍历
2.没有重复元素,任何元素存在唯一性,因此可以用来作去重处理,存储不重复的数据,
3.插入速度和删除速度非常快,遍历查找速度也非常快,但是略低于键值对类型。
4.支持方法:add(添加) delete(删除) has(查找) forEach(遍历)
属性: size 长度,只读的,没有length,
map 是一种有长度的键值对数据类型
特点
1.hashMap 键值对的数据类型 map对象是关联型的对象,类似php中关联型的数组结构
2.具备数组的长度紧密型,又具备对象的键值对方法
3.它的获取,删除,查询,遍历速度很快
4.任何数据类型都可以作为键进行存储,对象存储用的是引用地址进行存储的
支持方法
var map=new Map();
map.set(“name”,“morty”); //1.添加元素
map.set(“age”,27);
map.delete(“name”); //2.删除键名(删除元素)
console.log(map)
//map.clear(); //3.清除掉所有数据
console.log(map.has(“age”)); //4.判断某个键是否存在 返回布尔值
console.log(map.get(“age”)) //5.获取某个键的值 27
console.log(map.values());// 6.获取所有值的列表 {“morty”, 27}
console.log(map.keys()); // 7.获取所有键的列表 {“name”, “age”}