【ES6 】const命令
本质
  const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
基本用法
const PI = 3.1415;
PI // 3.1415 PI = 3;
// TypeError: Assignment to constant variable.const声明一个只读的常量。一旦声明,常量的值就不能改变。const foo;
// SyntaxError: Missing initializer in const declaration上面代码表示,对于
const来说,只声明不赋值,就会报错。if (true) {
const MAX = 5;
} MAX // Uncaught ReferenceError: MAX is not definedconst的作用域与let命令相同:只在声明所在的块级作用域内有效。if (true) {
console.log(MAX); // ReferenceError
const MAX = 5;
}const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。var message = "Hello!";
let age = 25; // 以下两行都会报错
const message = "Goodbye!";
const age = 30;不可重复声明
复合类型的数据
const foo = {}; // 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // // 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only上面代码中,常量
foo储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。const a = [];
a.push('Hello'); // 可执行
a.length = 0; // 可执行
a = ['Dave']; // 报错上面代码中,常量
a是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给a,就会报错。
【ES6 】const命令的更多相关文章
- es6学习笔记(1) let和const命令详解
		
let和const命令: Es6新增了let命令,声明变量,但与var不一样的,只在let命令所在的代码块内有效(如for循环之外let声明的变量就不再有效).并且let不像var那样会发生" ...
 - ES6之let(理解闭包)和const命令
		
ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...
 - ES6 入门系列 - let 和 const 命令
		
let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...
 - ES6 之  let和const命令 Symbol  Promise对象
		
ECMAScript 6入门 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了. (2016年6月,发布了小幅修订的<ECMASc ...
 - ES6 let和const命令(3)
		
const 用来声明常量.一旦声明,就不能改变. const在声明必须初始化,只声明不赋值会出错 const的作用域与let一样,只在声明的块级作用域有效. const命令声明的常量也不提升,同样存在 ...
 - es6 let和const命令(1)
		
基本用法 ES新增了let命令,用于声明变量.其用法类似于var,但是所声明的变量只在let命令所在的代码块中有效. for(let i = 0;i<5;i++) {} console.log( ...
 - es6之let和const命令的一些笔记
		
let和const命令 let命令 基本用法 let命令用来声明变量,声明的变量只在命令所在的代码块内有效.for循环中很适合使用let命令. 有必要理解的例子: var a = []; for (v ...
 - ES6简介之let和const命令解说
		
一.var申明变量 学习过JavaScript的同学都应该知道,ES5中申明变量使用var,ES5中的var可以说是无所不能的,所有类型的变量都是由var来申明,但往往很多使用者不知道var申明的变量 ...
 - ES6之新增const命令使用方法
		
hi,我又回来了,今天学习一下const命令. 声明一个常量 const声明一个只读常量,一旦声明,常量的值便不可改变. 例子如下: const food = 12; food = 23; // Un ...
 - ES6中let与const命令详解
		
阮一峰ES6入门 let 作用域 let命令用来声明变量,但声明的变量只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ReferenceError: ...
 
随机推荐
- 更新ubuntu的对应源配置文件
			
UBUNTU中安装依赖包,出现如下错误:E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/o ...
 - 谷歌guava缓存
			
简易缓存,可以设置时间的缓存 private static Cache<String,String> tokenCache = CacheBuilder.newBuilder().expi ...
 - MySQL有四种BLOB类型
			
先说明一下Blob的类型,直接从网上摘抄了!!!1.MySQL有四种BLOB类型: ·tinyblob:仅255个字符 ·blob:最大限制到65K字节 ·mediumblob:限制到16M字节 ·l ...
 - Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
			
Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...
 - TelephonyUtils
			
<uses-permission android:name="android.permission.CALL_PHONE"/> import java.util.Arr ...
 - h5 与原生 app 交互的原理
			
现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如微信的 jssdk,通过 window.wx 对象调用一些原生 app 的功能.所以,这次就来捋 ...
 - flutter richText富文本
			
flutter中富文本使用 RichText( text: TextSpan( text: '登陆即同意', style: TextStyle(fontSize: 14, color: Colors. ...
 - MongoDB集群-主从复制(副本集)、failover
			
1.概念 主从复制的目的:数据冗余.备份.读写分离 主从方式:一主一从(不推荐,只能实现复制,主节点挂掉且未重新启动的时候,无法提升从节点为master),一主一从一裁判,一主多从 复制方式:主节点记 ...
 - Java和SQL取两个字符间的值
			
Java String str = "abcdefg"; String result = str.substring(str.indexOf(">")+1 ...
 - SpringCloud学习(四)断路器(Hystrix)(Finchley版本)
			
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...