三者区别

var 声明是全局作用域或函数作用域,而 let 和 const 是块作用域。

  • var 有变量提升机制,而 let 和 const 没有
  • let 可以被修改但不能被重新声明,
  • const 定义的变量保持常量值,不可以被修改。但是const定义的对象下的属性仍可以被修改

如果希望const定义的对象的属性也不能被修改该怎么做

通过数据劫持的方式即可实现:

Object.defineProperty

const a = {
    b: 1
};

Object.defineProperty(a, 'b', {
    writable: false
});

a.b = 10;

console.log(a);

new Proxy

const a = {
    b: 1,
};

const c = new Proxy(a, {
    set: function(obj, prop) {
        return obj[prop];
    }
})

c.b = 2;

console.log(c);