es6声明常量

1.const常量的使用

const 不能重复声明

const 不属于顶层对象window

const不存在变量提升

暂时性死区

块级作用域

2.正常来说const是不可改变的常量,但是const在有些地方是可以被改变的

const 声明基本数据类型的时候。number , 布尔,字符串,undefind是不能改变的

const 声明 引用数据 object array 类型的时候,是可以进行改变的,

因为 修改的是引用地址的内容,并不是引用的地址。

const esObj = {
		name: 'es6',
		year: 2015
	};
	esObj.name = 'es2015';
	console.log(esObj)  //{name:"es2015",year:2015}
	
	const arr = ['es6','es7','es8'];
	arr[0] = 'es2015';
	console.log(arr)  //{'es2015','es7','es8'}

如果需求里 需要 对象和数组 也是不可修改的,可以用 Object.freeze().冻结这个对象或者函数。就可以不被改变了,但是他只能作为浅层次的冻结,只能冻结第一层。深层次的无法冻结

解决方案

使用递归 将深层次的对象或者数组进行冻结

function myFreeze(obj){

//将第一层冻结住

Object.freeze(obj);

// Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组

console.log(Object.keys(obj)) //['name', 'year', 'extension']

Object.keys(obj).forEach(function(key){

    if(typeof obj[key] == 'object'){

      console.log(typeof obj[key])

      myFreeze(obj[key])

     }

})

}

3.let vs const
在项目中如果一个值需要被改变的时候使用let ,如果不改变的时候尽量使用const

本文来自博客园,作者:小基狠努力啊,转载请注明原文链接:https://www.cnblogs.com/ylh188/p/15672523.html

原文地址:https://www.cnblogs.com/ylh188/p/15672523.html