我们如何将DOM元素声明为const并仍然修改它?

Fir*_*ane 2 javascript dom

我无法弄清楚为什么我们可以改变DOM元素,即使我们将它声明为常量.如果我们不改变它,那么我们真正在做什么呢?先感谢您.

const button = document.getElementsByTagName('button')[0];
const domElement = document.getElementsByTagName('div')[0];
button.addEventListener('click', e => {domElement.innerText = "how can I be modified even I am const?"});
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>DOM Example</title>
    
</head>
<body>
    <div>change me</div>
    <button>Change a DOM element </button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

cas*_*ber 7

const只能阻止您更改变量引用指向的对象.它没有阻止你修改对象本身.

这将是非法的:

const x = 5;
x = 4; // ERROR

const x = { a: 1 };
x = { b: 2 }; // ERROR
Run Code Online (Sandbox Code Playgroud)

但这很好:

const x = { a: 1 };
x.a = 5;
Run Code Online (Sandbox Code Playgroud)

  • 您会发现有关“良好实践”和不变性的不同意见,但我认为是完全良好的实践。在JS中,“ const”并不意味着(或暗示)被引用的整个对象必然是不可变的,而只是引用本身是不可变的。因此,如果您不打算更改变量指向的对象,那么即使您确实打算更改对象本身,也请继续将其设置为“ const”。 (2认同)