如果在JavaScript中导入*作为名称,为什么我可以重新分配常量?

如果在JavaScript中导入*作为名称,为什么我可以重新分配常量?,javascript,import,export,constants,immutability,Javascript,Import,Export,Constants,Immutability,如果我将常量作为整个模块的内容导入,为什么可以重新分配给它?它应该这样工作吗?我以为常数应该是不变的 例如: // constants.js export const APPLE = 'apple'; // app.js import { APPLE } from 'constants.js'; import * as constants from 'constants.js'; constants.APPLE = 'banana'; console.log(APPLE); //outpu

如果我将常量作为整个模块的内容导入,为什么可以重新分配给它?它应该这样工作吗?我以为常数应该是不变的

例如:

// constants.js
export const APPLE = 'apple';

// app.js
import { APPLE } from 'constants.js';
import * as constants from 'constants.js';

constants.APPLE = 'banana';
console.log(APPLE);

//output
banana;
我不能直接重新分配常量
APPLE
,但我可以重新分配
常量.APPLE
,这也会给
APPLE
一个新值

当我在Chrome中打印出
常量
时,我得到以下输出

//output of constants
{APPLE: "apple", __esModule: true}
  APPLE: "banana"
  __esModule: true
  __proto__: Object
为什么苹果的值不同?

关于“我认为常量应该是不可变的”。常量是可变的,但不能重新声明或重新分配。