ES6——ES6语法知识之 let 和 const 的区别以及解构赋值

文章目录

  • 前言
  • 初识ES6
    • 1.什么是ES6?
    • 2.为什么使用ES6?
  • 二、let   和 const
    • 1. let  变量
    • 2. const 常量
  • 解构赋值
    • 1. 数组模型的解构(Array)
    • 2.  对象模型的解构 (Object)
  • 总结

一、初识ES6

1.什么是ES6?

ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。

ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。

2.为什么使用ES6?

每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。

- 变量提升特性增加了程序运行时的不可预测性

- 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码


二、let   和 const

1. let  变量

1.1   let声明的变量只在所处于的块级有效。

案例一:分析如下会使用 var 和 let 声明的变量可发现在使用 var 关键字和 let 关键字声明的变量作用域是完全不同的。

var b=2;//全局变量
if(1==1){
			let a=1;
			console.log("块内a值是:",a);//1
			console.log("块内b值是:",b);//2
}
console.log("a值是:",a);//ReferenceError: a is not defined.
console.log("b值是:",b);//2

案例二:For 循环中使用 let 变量 var 声明的不同点

for(let i=1;i<=10;i++){
	console.log(i);     //运行结果:正常打印
}
console.log(i);         //运行结果: ReferenceError: i is not defined

1.2  let 不存在变量提升

案例三:var 变量 可以在变量声明前使用,多少有点奇怪,为了纠正这个现象,let改变了这个语法。

如下案例中: var声明的变量会在作用域内变量提升,但赋值不会提升,所以是undefined。而let的声明的变量不会提升,所以抛出语法错误。

console.log(a);     //运行结果: undefined
var a=1;
		
console.log(b);
let b=2;            //运行结果: ReferenceError: a is not defined.

1.3  暂时性死区

如下案例——  提前打印也就是提前使用了变量 PI  ,运行结果却是报错,这是为什么呢?其实这里也是因为使用不同的关键字声明变量的原因,例如,var 关键字具有变量提前声明的特性,而let 没有,因此提前使用就会产生暂时性死区——(也就是说使用声明的变量要先声明后使用)

var PI = "a";
if(true){
  console.log(PI);  // Cannot access 'PI' before initialization
  let PI = "3.1415926";
}

1.4  let 不允许重复声明

        let num = 10;
        let num = 5;
        console.log(num);   //错误原因: 不可重复声明

2、 const 常量

  • Const 具有let的所有特性
  • 声明常量,常量就是值(内存地址)不能变化的量。
  • 声明常量多用大写

3.  let、constvar 的区别

- 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象

- 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升

- 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值

- 使用 letconst  的声明的变量不属于顶层对象,返回undefined

 var num =10;     //顶级对象:在num上增加了顶层属性,也就是说这里的num 因为使用了var声明,因而在全局中都可使用,叫做顶级属性

    


三、解构赋值

解构赋值是对赋值运算符的扩展。是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

1. 数组模型的解构(Array)

1.1  基本类型的解构

        let [a,b,c] =[1,2,3];
        console.log(a);    //运行结果 1
        console.log(b);    //运行结果 2
        console.log(c);    //运行结果 3

1.2  多维数组可嵌套的解构

        let [a,[[b],c]] = [1,[[2],4]];
        console.log(a);   //  1
        console.log(b);   //   2
        console.log(c);    //  4
        

1.3  可忽略的解构

        let [a,,,d] =[1,2,3,4];
        console.log(d);   //4

1.4  不完全解构

    let [a=1,b] = [];
    console.log(a);   //1
    console.log(b);   //undefined

1.5   解构默认值

  let [a=2] = [undefined];
    console.log(a);   //  2

当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。

let [a = 3, b = a] = [];     // a = 3, b = 3
let [a = 3, b = a] = [1];    // a = 1, b = 1
let [a = 3, b = a] = [1, 2]; // a = 1, b = 2
  • a 与 b 匹配结果为 undefined ,触发默认值:a = 3; b = a =3
  • a 正常解构赋值,匹配结果:a = 1,b 匹配结果 undefined ,触发默认值:b = a =1
  • a 与 b 正常解构赋值,匹配结果:a = 1,b = 2

2.  对象模型的解构 (Object)

2.1  可嵌套可忽略

let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, {  }] } = obj;
// x = 'hello'

2.2  不完全解构

let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = 'world'

2.3   剩余运算符

let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}

2.4  结构默认值

let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;

总结

以上就是今日所要分享的内容,有关ES6 的知识点还有很多,有空还会和大家继续分享。

最后,依旧诚挚祝福屏幕前的你健康幸福、平安喜乐。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值