ES6语法

118 阅读4分钟

ES6语法:

1.var/let/const(8.9)
varletconst
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) //nulltest1(){  //解构赋值
  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 ,所以箭头函数不为参数 superthisnew.target 定义本地绑定。箭头函数中的 thissuperargumentsnew.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 3console.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]
9.排序的稳定性