zoukankan      html  css  js  c++  java
  • 浅谈ES6的let和const的异同点

     

    1、let和const的相同点:

    ① 只在声明所在的块级作用域内有效。

    ② 不提升,同时存在暂时性死区,只能在声明的位置后面使用。

    ③ 不可重复声明。

    2、let和const的不同点:

    ① let声明的变量可以改变,值和类型都可以改变;const声明的常量不可以改变,这意味着,const一旦声明,就必须立即初始化,不能以后再赋值。

    const i ; // 报错,一旦声明,就必须立即初始化
    const j = 5;
    j = 10; // 报错,常量不可以改变

    ② 数组和对象等复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const只保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个复合类型的变量声明为常量必须非常小心。

    const arr = [];
    // 报错,[1,2,3]与[]不是同一个地址
    arr = [1,2,3];
    const arr = [];
    // 不报错,变量名arr指向的地址不变,只是数据改变
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    console.log(arr.length); // 输出:3

    若想让定义的对象或数组的数据也不能改变,可以使用object.freeze(arr)进行冻结。冻结指的是不能向这个对象或数组添加新的属性,不能修改已有属性的值,不能删除已有属性。

    const arr = [];
    Object.freeze(arr);
    // 不报错,但数据改变无效
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    console.log(arr.length); // 输出:0
  • 相关阅读:
    【原创】Java与数据结构(上篇:排序算法)
    【九度OJ】题目1084:整数拆分
    kaixin001接入
    Facebook接入(下)
    svn手册摘录
    Facebook接入(上)
    使用mysqldb从数据库中导出xml
    使用cmd模块,让脚本更舒服些
    django 的简单测试
    python字符串替换
  • 原文地址:https://www.cnblogs.com/vivaxiaonan/p/9378987.html
Copyright © 2011-2022 走看看