加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

ES6+ const运用

发布时间:2023-03-23 13:21:33 所属栏目:教程 来源:
导读:const 的使用类似于 let,不同的是 const 在声明时必须初始化一个值,而且这个值不能被改变。

const PI = ; // 定义一个圆周率常量 PI
上面的代码声明了一个常量 PI,如果声明时没有初始化值时,则会抛出异常。
const 的使用类似于 let,不同的是 const 在声明时必须初始化一个值,而且这个值不能被改变。

const PI = ;  // 定义一个圆周率常量 PI
上面的代码声明了一个常量 PI,如果声明时没有初始化值时,则会抛出异常。

const PI;
// Uncaught SyntaxError: Missing initializer in const declaration
const 语句声明的是一个常量,并且这个常量是不能被更改的:

const PI = ;  // 定义一个圆周率常量 PI
PI =              // Uncaught TypeError: Assignment to constant variable.
这里声明了一个圆周率常量,我们知道圆周率是固定的不会被改变的,如果对 PI 重新赋值,则会抛出不能给常量分配变量的错误。

但如果使用 const 声明的变量是一个对象类型的话,我们可以改变对象里的值,这是因为 const 存的变量只是一个地址的引用,所以只要不改变引用的值,就不会报错。如下面的例子:

const obj = {};
obj.a =           // 12
const arr = [];
arr.push();       // 12
arr = {};           // Uncaught TypeError: Assignment to constant variable.
使用 const 声明了一个对象和一个数组,然后增加对象的属性和增加数组的值都不会报错,这是因为我们没有改变 obj 和 arr 的引用。如果对 arr 进行重赋值,则会报不能给常量分配变量的错误。

在 ES6 之前是不能定义常量的,如果想定义常量的话,需要借助 ES5 中的 defineProperty 方法,这里我们写个示例:

function setConst(key, value, obj) {
  Object.defineProperty(window, key, {
    get: function(){
      return value;
    },
    set: function(){
      console.error('Uncaught TypeError: Assignment to constant variable');
    },
  });
}
setConst('PI', );
console.log(PI)     // 3.1415
PI = ;             // Uncaught TypeError: Assignment to constant variable.
上面的代码是一个定义常量的函数,使用了 ES5 的 Object.defineProperty 方法,这个方法允许在一个对象上定义一个新的属性,具体使用详情可以参考 ES5 的相关文档说明。这里我们会在 window 对象上添加属性,也可以自己定义一个对象进行添加,可以实现局部作用域的效果。通过向 setConst 方法中传入指定的变量和值来声明一个常量,这样我们就在 ES5 中实现了常量的概念。由此可见,ES6 的 const 带来的好处。

变量还没有被声明,但是我们却可以使用这个未被声明的变量,这种情况就叫做提升,并且提升的是声明。

console.log(a); // undefined
var a = 
这个代码其实可以写出下面这样的方式:

var a;
console.log(a);  // undefined
a = 
其实变量提升就是,把变量名统一地提升到作用域的顶部进行率先定义,这也就是变量提升。不仅变量可以被提升,函数也可以被提升,并且函数的提升要优于变量的提升,函数提升会把整个函数挪到作用域顶部。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章