ES6

Posted yuesu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6相关的知识,希望对你有一定的参考价值。

一、声明变量 (块级作用域)

1.let :

1) 没有预编译,不存在变量提升,

在代码块内,只要let定义变量,在之前使用,都会报错。

2) 同一个作用域,不能重复定义变量

3) for循环:里面是父级作用域

2.const:常量,不可以修改。特性和let相同

1)定义完变量,必须有值,不能后赋值,不能修改

2)对象是引用,地址不变就可以。Object.freeze(对象) 不可以修改对象

// ================let===============

// 1.没有预编译,不存在变量提升
let a=123;
function fn(){
    console.log(a);  //TDZ开始  暂时性死区
    let a=5;//TDZ结束
}
fn();//error: a is not defined

//2. 同一个作用域,不能重复定义变量
let b=12;
let b=1234;
console.log(b);//error:Identifier ‘b‘ has already been declared


//3. for循环:里面是父子级作用域

for(let i=0;i<3;i++){//()里面是父作用域
    let i=asd;//子作用域
    console.log(i);//asd asd asd
}

let arr=[];
for(let i=0; i<10;i++){
    arr[i]=function(){
        console.log(i);
    }
}
arr[5]();//5 

// 利用闭包解决
let arr=[];
for(var i=0; i<10;i++){
    (function(j){
        arr[j]=function(){
            console.log(j);
        }
    }(i))
}
arr[5]();//5  

// ================const===============

//1. 定义完变量,必须有值,不能后赋值,不能修改
const a;
a=123;
console.log(a);// Missing initializer in const declaration

//2.对象是引用,地址不变就可以,可以修改
const arr1=[sas,wer];
arr1.push(asd);
console.log(arr1); //["sas", "wer", "asd"]

//3.Object.freeze(对象)  不可以修改
const arr=[apple,orange];
Object.freeze(arr);
arr.push(banana);
console.log(arr); //error:Cannot add property 2, object is not extensible

 

二、解构赋值

注意:左右两边,结构格式保持一致

解构:可以起别名,赋给默认值

// 起别名
let obj={
    name:weq,
    age:12,
}
let {name,age:ag}=obj;//ag 为age 的别名
console.log(name,ag);//weq 12

// 赋值 ,null需要特殊处理
let [a,b,c=]=[1,2];//[1,2,undefined]->1 2 "无"  [1,2,null]->1 2 null
console.log(a,b,c); //1 2 "无"

let [a,b,c=]=[1,2,null];
if(c==null) c=;
console.log(a,b,c); //1 2 "无"

// 先定义在用变量,需要加(),否则会报错{}会被解析为块级作用域
let a;
({a}={a:ads});
console.log(a);//ads


// 交换两个数的位置
let a=12;
let b=34;
[a,b]=[b,a];
console.log(a,b);//34 12


// 函数传参
 function show({a,b=}={}){
     console.log(a,b);
 }
show({a:1});//1 "无"

// 函数返回值
function getPos(){
    return {
        width:10,
        height:20
    }
}
let {width,height}=getPos();
console.log(width,height);//10,20

 

 

 

以上是关于ES6的主要内容,如果未能解决你的问题,请参考以下文章

ES6 模块串联

ES6解构赋值

ES7-Es8 js代码片段

JavaScript ES6 的let和const

VScode插件推荐

没有名称的Javascript ES6导入[重复]