ES6语法:
1.var/let/const(8.9)
| var | let | const |
|---|---|---|
| 1.变量提升; 2.重复声明; 3.在块级作用域之外也可调用;全局变量 | 1.块级作用域,在块级作用域之外不可调用; 3.不存在变量提升 4.影响作用域链 | 1.声明常量,一旦声明,常量的值不可改变; |
-
Let特性
// if else while for { let girl = 'zhangsan'; //1. var girl = 'lisi'; //2. } console.log(girl); //girl is not undefined;1. //lisi 2.通过window属性查询得到; -
var特性
console.log(a) // 打印undefined 变量提升,若没有提升,则出现报错; var a = 20 -
Const
const school ='111' //const声明一定要给初始值
2.变量的解构赋值(8.30)
数组的解构赋值: es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这称为解构;
let [a,b,c] = [1,2,3,4] //数组解构
console.log(a,b,c) //1,2,3
//如果解构不成功,变量的值为undefined
let [a] = [];
let [a,b] = ['foo']
console.log(a) //undefined
//解构允许指定默认值, 注意 es6中使用严格相等运算符(===),判断一个位置是否有值,只有单一个数组成员严格等于undefined;默认值才会生效;
let [x = 1] = undefined; //当数组成员严格等于undefined,默认值生效;
console.log(x) //1
let [x = 1] = [null]; //null不严格等于undefined,所以默认值不生效;
console.log(x) //null
test1(){ //解构赋值
const zhao = {
name : 'zixinag',
age : '12',
qiu:function(){
console.log('wozaiganshenm')
}
}
console.log(zhao) //
{
"name": "zixinag",
"age": "12",
"qiu":f()
}
}
3.模板字符串
//声明格式
let str = `woshishui`
let out = `ddd`;
console.log(`${out}string`) //dddstring
//优点:1.内容中可以直接出现换行符;2.变量拼接
4.简化对象
let name = 'xiaoming'
let change = function(){
console.log('xxx')
}
const shcool = { //对象简化
name,
change
}
5.箭头函数
函数对象是一个支持[[Call]]、[[Construct]]内部方法的对象。每个支持[[Construct]]的对象必须支持[[Call]],也就是说,每个构造函数必须是一个函数对象。因此,构造函数也可以被称为 构造函数函数 或 构造函数对象。 所以,想要对某个对象使用 new,就得确保该对象具有[[Construct]]这个内部方法。而箭头函数没有[[Construct]]。
因为箭头函数设计之初,就是为了设计一种更简短的函数并且不绑定this ,所以箭头函数不为参数 super、this 或 new.target 定义本地绑定。箭头函数中的 this、super、arguments 及 new.target 这些值由外围最近一层非箭头函数决定。
let fn = function(){
console.log("xxx")
}
//箭头函数
let fn = ()=>{
return a+b
}
//特性:1.this是静态的,this始终指向函数声明时所在作用域下的this的值 this指向不变;
//2.不能使用argument变量;
6.扩展运算符的应用:
ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列:
-
console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll('div')] // [<div>, <div>, <div>]
7.数组的合并
-
const arr1 = ['a', 'b']; const arr2 = ['c']; const arr3 = ['d', 'e']; [...arr1, ...arr2, ...arr3] // [ 'a', 'b', 'c', 'd', 'e' ]
8.构造函数新增的方法
关于构造函数,数组新增的方法有如下:
**1. Array.from()**
将两类对象转为真正的数组:类似数组的对象和可遍历`(iterable)`的对象(包括 `ES6` 新增的数据结构 `Set` 和 `Map`)
-
let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
**2. Array.of()**
用于将一组值转换为数组:
-
Array.of(3, 11, 8) // [3,11,8]
**3.includes()**
用于判断数组是否包含给定的值
-
[1, 2, 3].includes(2) // true [1, 2, 3].includes(4) // false [1, 2, NaN].includes(NaN) // true
**4.flat(),flatMap()**
将数组扁平化处理,返回一个新数组,对原数据没有影响
-
[1, 2, [3, 4]].flat() // [1, 2, 3, 4]
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1
-
[1, 2, [3, [4, 5]]].flat() // [1, 2, 3, [4, 5]] [1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5]
flatMap()方法对原数组的每个成员执行一个函数相当于执行Array.prototype.map(),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组
// 相当于 [[2, 4], [3, 6], [4, 8]].flat()
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]