ES6——const常量

1.常量必须在声明的时候赋值,否则报错

const a = 1;//必须赋值

2.常量不能被修改, 但是!!为引用类型的时候,可被修改,const只能保证指向的引用地址不变,但是地址中的内容是可以改变的

//类型为对象
const xiaoming = {
  age: 14,
  name: '小明'
};
console.log(xiaoming);//{age:14,name:"小明"}
xiaoming.age = 22;
console.log(xiaoming);//{age:22,name:"小明"}
//类型为数组
const ARR=[];
ARR.push(1);
console.log(ARR);//1

3.Object.freeze()可防止引用类型被修改;

const xiaoming = {
  age: 14,
  name: '小明'
};
Object.freeze(xiaoming);//防止常量引用类型被修改
console.log(xiaoming);
xiaoming.age = 22;
xiaoming.dd = 11;
console.log(xiaoming);

const ARR = [];
Object.freeze(ARR);//防止常量引用类型被修改
ARR.push(1);
console.log(ARR);

const扩展

1.Object.defineProperty(对象名属性名{value:属性值 }):可添加、修改属性值也可扩展属性

var CST = {};
	//给CST对象上修改/添加a属性并添加/修改它的value值叫小明
Object.defineProperty(CST, 'a', {
  value:‘小明’
  writable: false  //a属性设为只读的不能被修改
});

2.Object.seal(对象名)对象不可扩展但可以修改现有属性

var CST = {a: 1};
Object.seal(CST);

3.Object.hasOwnProperty():可判断对象中是否有自身属性或方法

练习封装一个简单的freeze效果

// 1. 遍历属性和方法
// 2. 修改遍历到的属性的描述
// 3. Object.seal()

Object.defineProperty(Object, 'freezePolyfill', {
  value: function(obj) {
    var i;
    for (i in obj) {
      if (obj.hasOwnProperty(i)) { //判断i属性是否是自身的而不是原型上的属性
        Object.defineProperty(obj, i, {
          writable: false
        });
      }
    }
    Object.seal(obj);
  }
});
const xiaoming = {
  age: 14,
  name: '小明',
  obj: {         //当属性的属性值又为对象时还是可修改通过上诉方法再次循环递归判断是否有自身的属性来封装  
    a: 1
  }
};

Object.freezePolyfill(xiaoming);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值