三者区别
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);