节点JS允许更改常量

时间:2016-10-26 21:53:31

标签: javascript node.js ecmascript-6

为什么node.js允许更改指定为常量的模块(或对象)?

例如,允许这样做:

const EXPRESS = require('express');
EXPRESS.someProperty = 'some value';

但这不是:

const MYCONST = '123';
MYCONST = '456';

3 个答案:

答案 0 :(得分:6)

const表示您无法更改引用本身,而不能更改引用所指向的内容。

const a = { name: 'tom' };

// you cannot change the reference (point a to something else)
a = 5; // this is an error

// but you can change the value stored at that reference with no problem
a.name = 'bob';

答案 1 :(得分:3)

const不会使对象变为不可变,因此您可以更改对象本身但不能将另一个对象分配给该引用

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/const

答案 2 :(得分:2)

来自文档:

  

const声明创建对值的只读引用。它   并不意味着它拥有的值是不可变的,只是变量   标识符无法重新分配。例如,如果内容是   一个对象,这意味着对象本身仍然可以改变。

这不是特定于节点的,它是Javascript规范的一部分。引用EXPRESS是常量,当您使用const声明时,不允许重新分配引用。

const EXPRESS = require('express');
EXPRESS = 'something else';

也会失败