js中的const定义常量

js中一旦被定义就无法再被修改的变量,称之为常量

在es6之前,定义变量不管是静态还是动态都用var,例如:

var PI = Math.PI;
PI = 100;
console.log(PI) //100

但是这样会有一个弊端,像原本并不想改变的值,如果写错了代码,可能就改变了,造成了错误。如上,圆周率PI是固定的值,这里的误操作给他赋值了100,这样以后再用到圆周率PI来计算的时候就造成了错误。于是es6优化了常量的定义,避免了更改它而产生错误。

ES6中通过const定义常量,常量通常用大写字母定义,多个单词之间用_分隔。

const定义常量的特点:

1 如果修改常量会报错

const PI = Math.PI;
PI = 100;
console.log(PI)

 

2 常量不支持声明前置

console.log(PI);
const PI = Math.PI;

  

3 常量是一个块作用域

if (true) {
	const COLOR = 'red';
}
console.log(COLOR)

 

 那么,在es5中如何定义一个不可改变的常量呢?

 在ES5中,可以冻结一个对象来定义常量来达到const定义常量的效果。

// 在ES5中通过冻结对象定义常量
var CONST = {
	MAX_NUM: 100,
	MIN_NUM: 10
}
Object.freeze(CONST);
// 尝试更改
CONST.MAX_NUM = 200;
console.log(CONST.MAX_NUM) //100

在ES5之前,定义常量,只能通过单例模式。只定义取值器,不定义赋值器,即可实现。

// 单例模式
var CONST = (function () {
	// 定义静态变量的容器
	var _const = {
		MAX_NUM: 500,
		MIN_NUM: 100
	}
	// 返回的接口中,只定义取值器
	return function (key) {
		return _const[key.toUpperCase()]
	}
})()

// 取值
console.log(CONST('MAX_NUM')) //500
console.log(CONST('min_num')) //100

 

 

 

你可能感兴趣的:(JavaScript)