ES6 let和const命令(3)
- const 用来声明常量。一旦声明,就不能改变。
- const在声明必须初始化,只声明不赋值会出错
- const的作用域与let一样,只在声明的块级作用域有效。
- const命令声明的常量也不提升,同样存在暂时性死去,只能在声明后使用。
- 对于复合型变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个变量声明为常量要非常小心。
const foo = {};
foo.prop = 123;
console.log(foo.prop);//123
foo = {}
console.log(foo);//Uncaught TypeError: Assignment to constant variable.
上面的代码中,常量foo储存的是一个地址,指向一个对象。不可改变的只是这个地址而不是对象。
下面是另一个例子
const a=[];
a.push("hello");//可执行
a.length = 0;//可执行
a=["dave"];//报错
上面例子中,常量a是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给a,就会报错。
如果真想冻结对象,应该使用Object.freeze方法。
const foo = Object.freeze({});
foo.prop = 123;//不起作用
上面代码中,常量foo指向一个冻结的对象,所以添加新属性不起作用。
除了将对象本身冻结,对象的属性也应该冻结。下面是将属性彻底冻结的例子。
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach((key,value) => {
if(typeof obj[key] == 'Object'){
constantize(obj[key]);
}
});
}
ES5中只有两种声明变量的方法:var命令和我function命令。ES6除let和const命令,还有另外两种声明变量的方法:import命令和class命令。所以,ES6一共有6种声明变量的方法。
ES6 let和const命令(3)的更多相关文章
- es6 let和const命令(1)
基本用法 ES新增了let命令,用于声明变量.其用法类似于var,但是所声明的变量只在let命令所在的代码块中有效. for(let i = 0;i<5;i++) {} console.log( ...
- ES6之新增const命令使用方法
hi,我又回来了,今天学习一下const命令. 声明一个常量 const声明一个只读常量,一旦声明,常量的值便不可改变. 例子如下: const food = 12; food = 23; // Un ...
- ES6 let和const命令(4)
const声明的常量只在当前代码块有效.如果想设置跨模块的常量,可以采用下面的写法. //constants.js模块 export const A = 1; export const B = 3; ...
- ES6中的const命令【转】
1.const声明一个只读常量,一旦声明,常量的值就不能改变 1 const PI=3.1415; 2 console.log(PI);//3.1415 3 4 PI=3;//Uncaught Typ ...
- ES6中的const命令
1.const声明一个只读常量,一旦声明,常量的值就不能改变 1 const PI=3.1415; 2 console.log(PI);//3.1415 3 4 PI=3;//Uncaught T ...
- ES6 let和const命令
一.let定义变量 { let a = 1;} console.log(a);只在let所在的代码块有效,console的结果是a is not defined,报错. 不存在var的变量提升,即使用 ...
- ES6 let和const命令(2)
为什么要使用块级作用域 在ES5中只有全局作用域和函数作用域,没有块级作用域,因此带来了这些麻烦 内层变量可能会覆盖外层变量 var tmp = new Date(); console.log(tmp ...
- es6学习笔记(1) let和const命令详解
let和const命令: Es6新增了let命令,声明变量,但与var不一样的,只在let命令所在的代码块内有效(如for循环之外let声明的变量就不再有效).并且let不像var那样会发生" ...
- ES6之let(理解闭包)和const命令
ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...
随机推荐
- JSP4(内置对象)
一.超级链接传值问题传值: <a href="href1.jsp?id=1&name=pkd&age=40">This is my JSP page. ...
- SQL面试题:有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列
.请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. ------------------- ...
- github与git之间怎么建立连接
git是一款强大的分布式版本控制系统,到底是什么意思呢?其实我也不知道,以后知道了再补上吧.下面咱们来讲一下github怎么与你电脑上的git建立起连接关系. 一.你要有一个github账号. 去百度 ...
- PHP简单实现购物车
首先,判断是否登录.if(isset($_session['user_id'])){ 存在: 把用户id和商品id,加入购物车表}else{ 不存在:使用cookie把商品ID和主机IP放入一个数组 ...
- [菜鸟弄nginx]nginx ---- 同一个server下根据host 配置不同的error_page页
有一个需求: 两个域名指向同一个nignx,不同的域名404跳转页面不同.如www.y.com跳到www.y.com/error.html ,www.j.com跳到www.j.com/errorxxx ...
- Redis入门篇
一.Redis简介: Redis(http://redis.io)是一款开源的.高性能的键-值存储(key-value store),它是用ANSI C来编写.Redis的项目名是Remote Dic ...
- js+画曲线和圆 并限制圆的渲染范围
通过三个点的坐标可确定一条双曲线. 公式: 1)y=ax^2+bx+c; 2) y=a(x-k)+h; 通过已知三点可确定a,b,c,h,k 2.通过圆心坐标(a,b)和半径r可确定一个圆,和已知的x ...
- kubernetes入门实践
k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...
- FSharp 调用 Oracle.ManagedDataAccess.dll
FSharp 调用 Oracle.ManagedDataAccess.dll 1.Oracle.ManagedDataAccess.dll 的下载地址.好像如今必需要注冊才干下载. 即使是 64 位系 ...
- duilib 快捷键发送消息
全局快捷键设置类,文章最以下,有3种不同的使用方法(假设设置的快捷键,与其它软件的快捷键同样.那么仅仅有你的程序起作用.你释放后它才干够使用) .h文件 #pragma once class CHot ...