ES6进修笔记:const

let敕令有的几个特征,const也有。ES6进修笔记:let的运用

其他特征:

用来声明常量,声明时必需初始化

const PI;//"SyntaxError: Missing initializer in const declaration

声明的常量不能从新赋值

//关于基础范例,值不能转变
const PI = 3.1415926;
PI = 3;//"TypeError: Assignment to constant variable.
//关于援用范例,
const obj = {x: 0};
obj = {y: '123'};//"TypeError: Assignment to constant variable.
obj.x = '123';//obj存储的是一个地点,地点不能变,但对象本身是可变的

假如不想后续变动对象,运用Object.freeze
Object.freeze MDN文档

用来凝结一个对象。凝结对象是指那些不能增加新的属性,不能修正已有属性的值,不能删除已有属性,以及不能修正已有属性的可罗列性、可设置性、可写性的对象。也就是说,这个对象永远是不可变的。该要领返回被凝结的对象。

const obj = Object.freeze({k:{}});
// 通例形式时,下面一行不起作用;
// 严厉形式时,该行会报错
obj.prop = 123;//TypeError: Can't add property prop, object is not extensible
obj.k = {x: 123};//"TypeError: Cannot assign to read only property 'k' of object '#<Object>'
obj.k.x = 123;//输出{k:{x: 123}}

上面的例子我们又发明一个题目:假如属性值是对象,照样只能凝结该对象的地点,而内容照样能够举行修正。

//运用递归对属性举行遍历并凝结
var constantize = function(obj){
  Object.freeze(obj);
  Object.keys(obj).forEach( function(key,value){
    if ( typeof obj[key] === 'object' ) {
        constantize( obj[key] );
      }
    });
 };

涉及到Object对象的几个要领,总结下
Object.keys MDN文档

返回一个由给定对象的一切可罗列本身属性的属性名构成的数组,数组中属性名的分列递次和运用for-in轮回遍历该对象时返回的递次一致(二者的重要区别是 for-in 还会遍历出一个对象从其原型链上继续到的可罗列属性)

var arr = ["a", "b", "c"];
alert(Object.keys(arr)); // 弹出"0,1,2",数组的下标

var obj = { 0 : "a", 1 : "b", 2 : "c"};
alert(Object.keys(obj)); // 弹出"0,1,2"

//enumerable默以为false, 也就是说getFoo是个不可罗列的属性
var my_obj = Object.create({}, 
{ getFoo : { 
    value : function () { return this.foo }
  } 
});
my_obj.foo = 1;
alert(Object.keys(my_obj)); // 只弹出foo

//手动设置getFoo可罗列
var my_obj = Object.create({}, 
{ getFoo : { 
    value : function () { return this.foo },
    enumerable: true
  } 
});

假如想运用Object对象供应的要领,还需要注意下浏览器的兼容题目。

    原文作者:云贤力
    原文地址: https://segmentfault.com/a/1190000004701675
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞