javascript - Javascript 也改变了 const 变量
问题描述
let courses = [
{id:1, name : "Femin"},
{id:2, name : "Darsh"},
{id:3, name : "Smit"},
];
let enteredId = 2;
const course = courses.find(c => c.id === enteredId);
course.name = "Darsh Bhimani";
console.log(course);
console.log(courses);
所以这是我一直在使用的代码。在过去的 5-6 年里,我一直在使用 Java 和 C、C++,并在一周前开始使用 Javascript。(对于 node.js)。
现在我在这里感到困惑的是两件事:
- 变量 course 是一个常数,它的值仍然可以改变。如何 ?
- 该课程是从数组课程中获取的,但仍在更改课程中,当我记录课程时,我看到数组的值也发生了变化。这怎么可能?
在这种情况下,值是否更改无关紧要,但是当我不希望数组更改时,我该怎么办?
解决方案
你可以找到一个对象引用并打破这个,你可以得到一个对象的浅拷贝Object.assign
。这种方法undefined
也有效,但在这种情况下返回一个空对象。
let courses = [
{id:1, name : "Femin"},
{id:2, name : "Darsh"},
{id:3, name : "Smit"},
];
let enteredId = 2;
const course = Object.assign({}, courses.find(c => c.id === enteredId));
course.name = "Darsh Bhimani";
console.log(course);
console.log(courses);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- r - 如果条件出现缺失值错误
- c++ - 使用 SwapBuffers 拦截绘制 OpenGL 叠加层
- laravel - Laravel 8 使用工厂使用播种机将数据添加到数据透视表
- mysql - 基于连接表的“BETWEEN”条件动态计数的 SQL 选择
- python - 实例变量差异(Python)
- laravel-livewire - 测试 Laravel Livewire 排序组件
- react-native - 标题后退按钮未显示在堆栈屏幕中
- c# - 在 C# 中使用 Nhibernate 标准过滤多个值
- node.js - cosmosdb 中的相关 ID - Azure 诊断表(日志分析)
- python - ResNet object has no attribute 'predict'