当前位置: 首页 > 面试题库 >

为什么我可以在javascript中更改常量的值

甄成弘
2023-03-14
问题内容

我知道ES6尚未标准化,但是目前许多浏览器都支持const JS中的关键字。

规范中写道:

常量的值不能通过重新分配而更改,并且常量也不能重新声明。因此,尽管可以在不初始化的情况下声明常量,但这样做是没有用的。

当我做这样的事情:

const xxx = 6;
xxx = 999;
xxx++;
const yyy = [];
yyy = 'string';
yyy = [15, 'a'];

我看到一切正常xxx6yyy[]

但是,如果这样做yyy.push(6); yyy.push(1);,我的常量数组已更改。现在是[6,1]这样,顺便说一句,我仍然无法用更改它yyy = 1;

我这是一个错误,还是我错过了什么?我在最新的chrome和FF29中尝试过


问题答案:

该文档指出:

…常量不能通过重新分配来更改
…常量不能被重新声明

当您添加到数组或对象时,您无需重新分配或重新声明常量,它已经被声明并分配了,您只需将常量添加到“列表”中即可。

所以这很好用:

const x = {};

x.foo = 'bar';

console.log(x); // {foo : 'bar'}

x.foo = 'bar2';

console.log(x); // {foo : 'bar2'}

和这个:

const y = [];

y.push('foo');

console.log(y); // ['foo']

y.unshift("foo2");

console.log(y); // ['foo2', 'foo']

y.pop();

console.log(y); // ['foo2']

但这些都不是:

const x = {};
x = {foo: 'bar'}; // error - re-assigning

const y = ['foo'];
const y = ['bar']; // error - re-declaring

const foo = 'bar'; 
foo = 'bar2';       // error - can not re-assign
var foo = 'bar3';   // error - already declared
function foo() {};  // error - already declared


 类似资料:
  • 问题内容: 我创建了以下课程 然后我从类中实例化了一个常量值 问题: 为什么我可以更改变量的内容?这不是常数吗?有人可以帮我解释一下,非常感谢。 问题答案: 正如@Wain所说的–这是由于引用类型的性质造成的。实例是一个常量仅意味着您不能为其分配新的引用–但却没有提及实例本身的实际可变性。 如果将类更改为结构,则将看到行为随 _值_类型的不同,因为更改属性会更改您的实际值-因此,如果它是常量,则无

  • 下面的代码为什么编译? std::move的文档说 执行此操作后,“移动自”范围中的元素仍将包含适当类型的有效值,但不一定与移动前的值相同。 所以这实际上可以改变对象foo2,即使它声明为const。为什么这样做有效?

  • 代码B是一个定制的回收视图apater,带有单选按钮。 mCustomAdapter 在 Code A 中的 fun methodA() 和 fun methodB() 中都发生了变化,因此 的引用也发生了变化,这意味着 val 属性 mySelectedIndex 从不同的地址获取值。 在我看来,val属性不能更改,为什么应用程序不会导致错误? 代码A 代码B 被改进的 我觉得代码DD和代码EE

  • 问题内容: 考虑一下Java中的以下接口: 和以下类: 为什么类A可以出现并覆盖接口I的最终常量? 自己尝试: 问题答案: 尽管事实上您正在隐藏变量,但是知道可以在java中更改final字段非常有趣,因为您可以在此处阅读: Java 5-“最终”不再是最终的 挪威Machina Networks的Narve Saetre昨天给我发了一封便条,其中提到我们可以将句柄更改为最终数组,这是很遗憾的。我

  • 考虑: 为什么改变的值会改变的值?

  • 问题内容: 我有一类具有各种成员变量的类。有一个构造函数,有getter方法,但没有setter方法。实际上,该对象应该是不变的。 现在我注意到了以下几点:当我使用getter方法获得变量列表时,可以添加新值,依此类推- 可以更改。下次调用此变量时,将返回更改的内容。怎么会这样?我没有再设置它,我只是在做它!使用这种行为是不可能的。那么这里有什么区别? 问题答案: 仅仅因为 对 列表 的引用 是不