【发布时间】:2016-10-26 21:53:31
【问题描述】:
为什么 node.js 允许更改指定为常量的模块(或对象)?
例如,这是允许的:
const EXPRESS = require('express');
EXPRESS.someProperty = 'some value';
但这不是:
const MYCONST = '123';
MYCONST = '456';
【问题讨论】:
标签: javascript node.js ecmascript-6
为什么 node.js 允许更改指定为常量的模块(或对象)?
例如,这是允许的:
const EXPRESS = require('express');
EXPRESS.someProperty = 'some value';
但这不是:
const MYCONST = '123';
MYCONST = '456';
【问题讨论】:
标签: javascript node.js ecmascript-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';
【讨论】:
const 不会使对象变得不可变,因此您可以更改对象本身,但不能将另一个对象分配给该引用
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/const
【讨论】:
来自文档:
const 声明创建对值的只读引用。它 并不意味着它持有的值是不可变的,只是变量 无法重新分配标识符。例如,如果内容是 一个对象,这意味着对象本身仍然可以更改。
这不是特定于节点的,它是 Javascript 规范的一部分。引用EXPRESS 是常量,使用const 声明时,不允许重新分配引用。
const EXPRESS = require('express');
EXPRESS = 'something else';
也会失败
【讨论】: